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;
}