Add special "property reference" CodeGen::LValue type for emitting
Objective-C property references.
 - This handles property references "more correctly" but setters still
   don't work.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55534 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp
index cee8852..7334dd7 100644
--- a/lib/CodeGen/CGExprScalar.cpp
+++ b/lib/CodeGen/CGExprScalar.cpp
@@ -144,7 +144,7 @@
     return EmitLoadOfLValue(E);
   }
   Value *VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) {
-    return CGF.EmitObjCPropertyGet(E).getScalarVal();
+    return EmitLoadOfLValue(E);
   }
   Value *VisitObjCMessageExpr(ObjCMessageExpr *E) {
     return CGF.EmitObjCMessageExpr(E).getScalarVal();
@@ -783,11 +783,12 @@
   // Store the result value into the LHS lvalue.
   CGF.EmitStoreThroughLValue(RValue::get(Result), LHSLV, LHSTy);
 
-  // For bitfields, we need the value in the bitfield
+  // For bitfields, we need the value in the bitfield. Note that
+  // property references do not reload their value (even though the
+  // setter may have changed it).
   // FIXME: This adds an extra bitfield load
   if (LHSLV.isBitfield())
     Result = EmitLoadOfLValue(LHSLV, LHSTy);
-
   return Result;
 }
 
@@ -1000,10 +1001,13 @@
   // FIXME: Volatility!
   CGF.EmitStoreThroughLValue(RValue::get(RHS), LHS, E->getType());
 
-  // For bitfields, we need the value in the bitfield
+  // For bitfields, we need the value in the bitfield. Note that
+  // property references do not reload their value (even though the
+  // setter may have changed it).
   // FIXME: This adds an extra bitfield load
   if (LHS.isBitfield())
     return EmitLoadOfLValue(LHS, E->getLHS()->getType());
+
   // Return the RHS.
   return RHS;
 }