objective-C: make -Widiomatic-parentheses work
when assignment expression in conditional invloves
property reference. // rdar://11066598


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162846 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index 7aa7732..2706ae4 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -11191,7 +11191,9 @@
 
     IsOrAssign = Op->getOperator() == OO_PipeEqual;
     Loc = Op->getOperatorLoc();
-  } else {
+  } else if (PseudoObjectExpr *POE = dyn_cast<PseudoObjectExpr>(E))
+    return DiagnoseAssignmentAsCondition(POE->getSyntacticForm());
+  else {
     // Not an assignment.
     return;
   }
diff --git a/test/SemaObjC/idiomatic-parentheses.m b/test/SemaObjC/idiomatic-parentheses.m
index 417b948..801db59 100644
--- a/test/SemaObjC/idiomatic-parentheses.m
+++ b/test/SemaObjC/idiomatic-parentheses.m
@@ -4,13 +4,18 @@
 // <rdar://problem/7382435>
 
 @interface Object 
+{
+  unsigned uid;
+}
 - (id) init;
 - (id) initWithInt: (int) i;
 - (void) iterate: (id) coll;
 - (id) nextObject;
+@property unsigned uid;
 @end
 
 @implementation Object
+@synthesize uid;
 - (id) init {
   if (self = [self init]) {
   }
@@ -20,6 +25,12 @@
 - (id) initWithInt: (int) i {
   if (self = [self initWithInt: i]) {
   }
+  // rdar://11066598
+  if (self.uid = 100) { // expected-warning {{using the result of an assignment as a condition without parentheses}} \
+                        // expected-note {{place parentheses around the assignment to silence this warning}} \
+                        // expected-note {{use '==' to turn this assignment into an equality comparison}}
+        // ...
+  }
   return self;
 }