Fix a NYI in IRGen which was due to incorrect AST
for property reference expression (of c++ object type)
in the conditional expression. Fixes // rdar://8291337



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114783 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index f30fcf7..e4ee90d 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -2592,8 +2592,16 @@
   //   the result is of that type [...]
   bool Same = Context.hasSameType(LTy, RTy);
   if (Same && LHS->isLvalue(Context) == Expr::LV_Valid &&
-      RHS->isLvalue(Context) == Expr::LV_Valid)
-    return LTy;
+      RHS->isLvalue(Context) == Expr::LV_Valid) {
+    // In this context, property reference is really a message call and
+    // is not considered an l-value.
+    bool lhsProperty = (isa<ObjCPropertyRefExpr>(LHS) || 
+                        isa<ObjCImplicitSetterGetterRefExpr>(LHS));
+    bool rhsProperty = (isa<ObjCPropertyRefExpr>(RHS) || 
+                        isa<ObjCImplicitSetterGetterRefExpr>(RHS));
+    if (!lhsProperty && !rhsProperty)
+      return LTy;
+  }
 
   // C++0x 5.16p5
   //   Otherwise, the result is an rvalue. If the second and third operands