// RUN: %clang_cc1  -fsyntax-only -verify %s
// rdar://8155806

@interface Subclass 
{
    int setterOnly;
}
- (void) setSetterOnly : (int) arg;
@end

int func (int arg, Subclass *x) {
    if (x.setterOnly) { // expected-error {{no getter method for read from property}}
      x.setterOnly = 1;
    }
    func(x.setterOnly + 1, x); // expected-error {{no getter method for read from property}}
    int i = x.setterOnly + 1;  // expected-error {{no getter method for read from property}}
    return x.setterOnly + 1;   // expected-error {{no getter method for read from property}}
}

// <rdar://problem/12765391>

@interface TestClass 
+ (void) setSetterOnly : (int) arg;
@end

int func2 (int arg) {
    if (TestClass.setterOnly) { // expected-error {{no getter method for read from property}}
      TestClass.setterOnly = 1;
    }
    func(TestClass.setterOnly + 1, x); // expected-error {{no getter method for read from property}} \
                                       // expected-error {{use of undeclared identifier 'x'}}
    int i = TestClass.setterOnly + 1;  // expected-error {{no getter method for read from property}}
    return TestClass.setterOnly + 1;   // expected-error {{no getter method for read from property}}
}

@interface Sub : Subclass
- (int) func3;
@end
@implementation Sub
- (int) func3 {
	return super.setterOnly; // expected-error {{no getter method for read from property}}
}
@end
