Complain on missing property getter method only
if property-dot expression is decidedly
an rvalue. // rdar://8155806.

llvm-svn: 122430
diff --git a/clang/test/SemaObjC/error-missing-getter.m b/clang/test/SemaObjC/error-missing-getter.m
new file mode 100644
index 0000000..3c91ab2
--- /dev/null
+++ b/clang/test/SemaObjC/error-missing-getter.m
@@ -0,0 +1,19 @@
+// 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 {{expected getter method not found on object of type 'Subclass *'}}
+      x.setterOnly = 1;
+    }
+    func(x.setterOnly + 1, x); // expected-error {{expected getter method not found on object of type 'Subclass *'}} 
+    int i = x.setterOnly + 1;  // expected-error {{expected getter method not found on object of type 'Subclass *'}} 
+    return x.setterOnly + 1;   // expected-error {{expected getter method not found on object of type 'Subclass *'}} 
+}
+
diff --git a/clang/test/SemaObjC/property-user-setter.m b/clang/test/SemaObjC/property-user-setter.m
index 9479bc6..2f1e197 100644
--- a/clang/test/SemaObjC/property-user-setter.m
+++ b/clang/test/SemaObjC/property-user-setter.m
@@ -70,7 +70,7 @@
 {
     int setterOnly;
 }
-- (void) setSetterOnly:(int)value;	// expected-note {{or because setter is declared here, but no getter method 'setterOnly' is found}}
+- (void) setSetterOnly:(int)value;
 @end
 
 @implementation Subclass
@@ -82,14 +82,14 @@
 
 @interface C {}
 // - (int)Foo;
-- (void)setFoo:(int)value;	// expected-note 2 {{or because setter is declared here, but no getter method 'Foo' is found}}
+- (void)setFoo:(int)value;
 @end
 
 void g(int);
 
 void f(C *c) {
-    c.Foo = 17; // expected-error {{property 'Foo' not found on object of type 'C *'}}
-    g(c.Foo); // expected-error {{property 'Foo' not found on object of type 'C *'}}
+    c.Foo = 17; // OK 
+    g(c.Foo); // expected-error {{expected getter method not found on object of type 'C *'}}
 }
 
 
@@ -97,7 +97,7 @@
 int main (void) {
     Subclass *x = [[Subclass alloc] init];
 
-    x.setterOnly = 4;  // expected-error {{property 'setterOnly' not found on object of type 'Subclass *'}}
+    x.setterOnly = 4;   // OK
     if (g_val != 4)
       abort ();
     return 0;