[cfe-commits] r120884 - in /cfe/trunk/lib/CodeGen: CGExpr.cpp CGExprAgg.cpp CGExprCXX.cpp CGExprComplex.cpp CGExprScalar.cpp CGObjC.cpp CGValue.h CodeGenFunction.h
John McCall
rjmccall at apple.com
Fri Dec 3 18:32:38 PST 2010
Author: rjmccall
Date: Fri Dec 3 20:32:38 2010
New Revision: 120884
URL: http://llvm.org/viewvc/llvm-project?rev=120884&view=rev
Log:
Kill the KVC l-value kind and calculate the base expression when emitting
the l-value.
Modified:
cfe/trunk/lib/CodeGen/CGExpr.cpp
cfe/trunk/lib/CodeGen/CGExprAgg.cpp
cfe/trunk/lib/CodeGen/CGExprCXX.cpp
cfe/trunk/lib/CodeGen/CGExprComplex.cpp
cfe/trunk/lib/CodeGen/CGExprScalar.cpp
cfe/trunk/lib/CodeGen/CGObjC.cpp
cfe/trunk/lib/CodeGen/CGValue.h
cfe/trunk/lib/CodeGen/CodeGenFunction.h
Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=120884&r1=120883&r2=120884&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExpr.cpp Fri Dec 3 20:32:38 2010
@@ -195,11 +195,9 @@
if (E->isLValue()) {
// Emit the expression as an lvalue.
LValue LV = CGF.EmitLValue(E);
- if (LV.isPropertyRef() || LV.isKVCRef()) {
+ if (LV.isPropertyRef()) {
QualType QT = E->getType();
- RValue RV =
- LV.isPropertyRef() ? CGF.EmitLoadOfPropertyRefLValue(LV, QT)
- : CGF.EmitLoadOfKVCRefLValue(LV, QT);
+ RValue RV = CGF.EmitLoadOfPropertyRefLValue(LV);
assert(RV.isScalar() && "EmitExprForReferenceBinding");
return RV.getScalarVal();
}
@@ -671,11 +669,8 @@
if (LV.isBitField())
return EmitLoadOfBitfieldLValue(LV, ExprType);
- if (LV.isPropertyRef())
- return EmitLoadOfPropertyRefLValue(LV, ExprType);
-
- assert(LV.isKVCRef() && "Unknown LValue type!");
- return EmitLoadOfKVCRefLValue(LV, ExprType);
+ assert(LV.isPropertyRef() && "Unknown LValue type!");
+ return EmitLoadOfPropertyRefLValue(LV);
}
RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV,
@@ -750,16 +745,6 @@
return RValue::get(Res);
}
-RValue CodeGenFunction::EmitLoadOfPropertyRefLValue(LValue LV,
- QualType ExprType) {
- return EmitObjCPropertyGet(LV.getPropertyRefExpr());
-}
-
-RValue CodeGenFunction::EmitLoadOfKVCRefLValue(LValue LV,
- QualType ExprType) {
- return EmitObjCPropertyGet(LV.getKVCRefExpr());
-}
-
// If this is a reference to a subset of the elements of a vector, create an
// appropriate shufflevector.
RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue(LValue LV,
@@ -820,11 +805,8 @@
if (Dst.isBitField())
return EmitStoreThroughBitfieldLValue(Src, Dst, Ty);
- if (Dst.isPropertyRef())
- return EmitStoreThroughPropertyRefLValue(Src, Dst, Ty);
-
- assert(Dst.isKVCRef() && "Unknown LValue type");
- return EmitStoreThroughKVCRefLValue(Src, Dst, Ty);
+ assert(Dst.isPropertyRef() && "Unknown LValue type");
+ return EmitStoreThroughPropertyRefLValue(Src, Dst);
}
if (Dst.isObjCWeak() && !Dst.isNonGC()) {
@@ -969,18 +951,6 @@
}
}
-void CodeGenFunction::EmitStoreThroughPropertyRefLValue(RValue Src,
- LValue Dst,
- QualType Ty) {
- EmitObjCPropertySet(Dst.getPropertyRefExpr(), Src);
-}
-
-void CodeGenFunction::EmitStoreThroughKVCRefLValue(RValue Src,
- LValue Dst,
- QualType Ty) {
- EmitObjCPropertySet(Dst.getKVCRefExpr(), Src);
-}
-
void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src,
LValue Dst,
QualType Ty) {
@@ -1569,7 +1539,7 @@
BaseQuals = PTy->getPointeeType().getQualifiers();
} else if (ObjCPropertyRefExpr *PRE
= dyn_cast<ObjCPropertyRefExpr>(BaseExpr->IgnoreParens())) {
- RValue RV = EmitObjCPropertyGet(PRE);
+ RValue RV = EmitLoadOfPropertyRefLValue(EmitObjCPropertyRefLValue(PRE));
BaseValue = RV.getAggregateAddr();
BaseQuals = BaseExpr->getType().getQualifiers();
} else {
@@ -1788,11 +1758,9 @@
case CK_NoOp:
if (!E->getSubExpr()->isRValue() || E->getType()->isRecordType()) {
LValue LV = EmitLValue(E->getSubExpr());
- if (LV.isPropertyRef() || LV.isKVCRef()) {
+ if (LV.isPropertyRef()) {
QualType QT = E->getSubExpr()->getType();
- RValue RV =
- LV.isPropertyRef() ? EmitLoadOfPropertyRefLValue(LV, QT)
- : EmitLoadOfKVCRefLValue(LV, QT);
+ RValue RV = EmitLoadOfPropertyRefLValue(LV);
assert(RV.isAggregate());
llvm::Value *V = RV.getAggregateAddr();
return MakeAddrLValue(V, QT);
@@ -1861,11 +1829,9 @@
LValue LV = EmitLValue(E->getSubExpr());
llvm::Value *This;
- if (LV.isPropertyRef() || LV.isKVCRef()) {
+ if (LV.isPropertyRef()) {
QualType QT = E->getSubExpr()->getType();
- RValue RV =
- LV.isPropertyRef() ? EmitLoadOfPropertyRefLValue(LV, QT)
- : EmitLoadOfKVCRefLValue(LV, QT);
+ RValue RV = EmitLoadOfPropertyRefLValue(LV);
assert (!RV.isScalar() && "EmitCastLValue");
This = RV.getAggregateAddr();
}
@@ -2107,9 +2073,15 @@
// This is a special l-value that just issues sends when we load or
// store through it.
- if (E->isImplicitProperty())
- return LValue::MakeKVCRef(E, E->getType().getCVRQualifiers());
- return LValue::MakePropertyRef(E, E->getType().getCVRQualifiers());
+ // For certain base kinds, we need to emit the base immediately.
+ llvm::Value *Base;
+ if (E->isSuperReceiver())
+ Base = 0;
+ else if (E->isClassReceiver())
+ Base = CGM.getObjCRuntime().GetClass(Builder, E->getClassReceiver());
+ else
+ Base = EmitScalarExpr(E->getBase());
+ return LValue::MakePropertyRef(E, Base);
}
LValue CodeGenFunction::EmitStmtExprLValue(const StmtExpr *E) {
Modified: cfe/trunk/lib/CodeGen/CGExprAgg.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprAgg.cpp?rev=120884&r1=120883&r2=120884&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprAgg.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprAgg.cpp Fri Dec 3 20:32:38 2010
@@ -349,7 +349,8 @@
}
void AggExprEmitter::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) {
- RValue RV = CGF.EmitObjCPropertyGet(E, getReturnValueSlot());
+ RValue RV = CGF.EmitLoadOfPropertyRefLValue(CGF.EmitObjCPropertyRefLValue(E),
+ getReturnValueSlot());
EmitGCMove(E, RV);
}
@@ -388,11 +389,7 @@
if (LHS.isPropertyRef()) {
AggValueSlot Slot = EnsureSlot(E->getRHS()->getType());
CGF.EmitAggExpr(E->getRHS(), Slot);
- CGF.EmitObjCPropertySet(LHS.getPropertyRefExpr(), Slot.asRValue());
- } else if (LHS.isKVCRef()) {
- AggValueSlot Slot = EnsureSlot(E->getRHS()->getType());
- CGF.EmitAggExpr(E->getRHS(), Slot);
- CGF.EmitObjCPropertySet(LHS.getKVCRefExpr(), Slot.asRValue());
+ CGF.EmitStoreThroughPropertyRefLValue(Slot.asRValue(), LHS);
} else {
bool GCollection = false;
if (CGF.getContext().getLangOptions().getGCMode())
Modified: cfe/trunk/lib/CodeGen/CGExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprCXX.cpp?rev=120884&r1=120883&r2=120884&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprCXX.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprCXX.cpp Fri Dec 3 20:32:38 2010
@@ -124,11 +124,9 @@
This = EmitScalarExpr(ME->getBase());
else {
LValue BaseLV = EmitLValue(ME->getBase());
- if (BaseLV.isPropertyRef() || BaseLV.isKVCRef()) {
+ if (BaseLV.isPropertyRef()) {
QualType QT = ME->getBase()->getType();
- RValue RV =
- BaseLV.isPropertyRef() ? EmitLoadOfPropertyRefLValue(BaseLV, QT)
- : EmitLoadOfKVCRefLValue(BaseLV, QT);
+ RValue RV = EmitLoadOfPropertyRefLValue(BaseLV);
This = RV.isScalar() ? RV.getScalarVal() : RV.getAggregateAddr();
}
else
@@ -242,13 +240,10 @@
"EmitCXXOperatorMemberCallExpr - user declared copy assignment");
LValue LV = EmitLValue(E->getArg(0));
llvm::Value *This;
- if (LV.isPropertyRef() || LV.isKVCRef()) {
+ if (LV.isPropertyRef()) {
AggValueSlot Slot = CreateAggTemp(E->getArg(1)->getType());
EmitAggExpr(E->getArg(1), Slot);
- if (LV.isPropertyRef())
- EmitObjCPropertySet(LV.getPropertyRefExpr(), Slot.asRValue());
- else
- EmitObjCPropertySet(LV.getKVCRefExpr(), Slot.asRValue());
+ EmitStoreThroughPropertyRefLValue(Slot.asRValue(), LV);
return RValue::getAggregate(0, false);
}
else
@@ -267,11 +262,9 @@
FPT->isVariadic());
LValue LV = EmitLValue(E->getArg(0));
llvm::Value *This;
- if (LV.isPropertyRef() || LV.isKVCRef()) {
+ if (LV.isPropertyRef()) {
QualType QT = E->getArg(0)->getType();
- RValue RV =
- LV.isPropertyRef() ? EmitLoadOfPropertyRefLValue(LV, QT)
- : EmitLoadOfKVCRefLValue(LV, QT);
+ RValue RV = EmitLoadOfPropertyRefLValue(LV);
assert (!RV.isScalar() && "EmitCXXOperatorMemberCallExpr");
This = RV.getAggregateAddr();
}
Modified: cfe/trunk/lib/CodeGen/CGExprComplex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprComplex.cpp?rev=120884&r1=120883&r2=120884&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprComplex.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprComplex.cpp Fri Dec 3 20:32:38 2010
@@ -64,11 +64,8 @@
if (LV.isSimple())
return EmitLoadOfComplex(LV.getAddress(), LV.isVolatileQualified());
- if (LV.isPropertyRef())
- return CGF.EmitObjCPropertyGet(LV.getPropertyRefExpr()).getComplexVal();
-
- assert(LV.isKVCRef() && "Unknown LValue type!");
- return CGF.EmitObjCPropertyGet(LV.getKVCRefExpr()).getComplexVal();
+ assert(LV.isPropertyRef() && "Unknown LValue type!");
+ return CGF.EmitLoadOfPropertyRefLValue(LV).getComplexVal();
}
/// EmitLoadOfComplex - Given a pointer to a complex value, emit code to load
@@ -531,11 +528,7 @@
// We know the LHS is a complex lvalue.
ComplexPairTy LHSComplexPair;
if (LHS.isPropertyRef())
- LHSComplexPair =
- CGF.EmitObjCPropertyGet(LHS.getPropertyRefExpr()).getComplexVal();
- else if (LHS.isKVCRef())
- LHSComplexPair =
- CGF.EmitObjCPropertyGet(LHS.getKVCRefExpr()).getComplexVal();
+ LHSComplexPair = CGF.EmitLoadOfPropertyRefLValue(LHS).getComplexVal();
else
LHSComplexPair = EmitLoadOfComplex(LHS.getAddress(),
LHS.isVolatileQualified());
@@ -551,10 +544,7 @@
// Store the result value into the LHS lvalue.
if (LHS.isPropertyRef())
- CGF.EmitObjCPropertySet(LHS.getPropertyRefExpr(),
- RValue::getComplex(Result));
- else if (LHS.isKVCRef())
- CGF.EmitObjCPropertySet(LHS.getKVCRefExpr(), RValue::getComplex(Result));
+ CGF.EmitStoreThroughPropertyRefLValue(RValue::getComplex(Result), LHS);
else
EmitStoreOfComplex(Result, LHS.getAddress(), LHS.isVolatileQualified());
@@ -573,7 +563,7 @@
return Val;
// Objective-C property assignment never reloads the value following a store.
- if (LV.isPropertyRef() || LV.isKVCRef())
+ if (LV.isPropertyRef())
return Val;
// If the lvalue is non-volatile, return the computed value of the assignment.
@@ -599,9 +589,7 @@
// Store the result value into the LHS lvalue.
if (LHS.isPropertyRef())
- CGF.EmitObjCPropertySet(LHS.getPropertyRefExpr(), RValue::getComplex(Val));
- else if (LHS.isKVCRef())
- CGF.EmitObjCPropertySet(LHS.getKVCRefExpr(), RValue::getComplex(Val));
+ CGF.EmitStoreThroughPropertyRefLValue(RValue::getComplex(Val), LHS);
else
EmitStoreOfComplex(Val, LHS.getAddress(), LHS.isVolatileQualified());
@@ -617,7 +605,7 @@
return Val;
// Objective-C property assignment never reloads the value following a store.
- if (LV.isPropertyRef() || LV.isKVCRef())
+ if (LV.isPropertyRef())
return Val;
// If the lvalue is non-volatile, return the computed value of the assignment.
Modified: cfe/trunk/lib/CodeGen/CGExprScalar.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprScalar.cpp?rev=120884&r1=120883&r2=120884&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprScalar.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprScalar.cpp Fri Dec 3 20:32:38 2010
@@ -1127,9 +1127,7 @@
if (E->Classify(CGF.getContext()).isGLValue()) {
LValue LV = CGF.EmitLValue(E);
if (LV.isPropertyRef())
- CGF.EmitLoadOfPropertyRefLValue(LV, E->getType());
- else if (LV.isKVCRef())
- CGF.EmitLoadOfKVCRefLValue(LV, E->getType());
+ CGF.EmitLoadOfPropertyRefLValue(LV);
}
else
CGF.EmitAnyExpr(E, AggValueSlot::ignored(), true);
@@ -1583,7 +1581,7 @@
return RHS;
// Objective-C property assignment never reloads the value following a store.
- if (LHS.isPropertyRef() || LHS.isKVCRef())
+ if (LHS.isPropertyRef())
return RHS;
// If the lvalue is non-volatile, return the computed value of the assignment.
@@ -2183,7 +2181,7 @@
return RHS;
// Objective-C property assignment never reloads the value following a store.
- if (LHS.isPropertyRef() || LHS.isKVCRef())
+ if (LHS.isPropertyRef())
return RHS;
// If the lvalue is non-volatile, return the computed value of the assignment.
Modified: cfe/trunk/lib/CodeGen/CGObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjC.cpp?rev=120884&r1=120883&r2=120884&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjC.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjC.cpp Fri Dec 3 20:32:38 2010
@@ -528,8 +528,9 @@
}
-RValue CodeGenFunction::EmitObjCPropertyGet(const ObjCPropertyRefExpr *E,
- ReturnValueSlot Return) {
+RValue CodeGenFunction::EmitLoadOfPropertyRefLValue(LValue LV,
+ ReturnValueSlot Return) {
+ const ObjCPropertyRefExpr *E = LV.getPropertyRefExpr();
QualType ResultType;
Selector S;
if (E->isExplicitProperty()) {
@@ -545,14 +546,9 @@
if (E->isSuperReceiver())
return EmitObjCSuperPropertyGet(E, S, Return);
- llvm::Value *Receiver;
- const ObjCInterfaceDecl *ReceiverClass = 0;
- if (E->isClassReceiver()) {
- ReceiverClass = E->getClassReceiver();
- Receiver = CGM.getObjCRuntime().GetClass(Builder, ReceiverClass);
- } else {
- Receiver = EmitScalarExpr(E->getBase());
- }
+ llvm::Value *Receiver = LV.getPropertyRefBaseAddr();
+ const ObjCInterfaceDecl *ReceiverClass
+ = (E->isClassReceiver() ? E->getClassReceiver() : 0);
return CGM.getObjCRuntime().
GenerateMessageSend(*this, Return, ResultType, S,
Receiver, CallArgList(), ReceiverClass);
@@ -579,8 +575,9 @@
return;
}
-void CodeGenFunction::EmitObjCPropertySet(const ObjCPropertyRefExpr *E,
- RValue Src) {
+void CodeGenFunction::EmitStoreThroughPropertyRefLValue(RValue Src,
+ LValue Dst) {
+ const ObjCPropertyRefExpr *E = Dst.getPropertyRefExpr();
Selector S = E->getSetterSelector();
QualType ArgType;
if (E->isImplicitProperty()) {
@@ -596,14 +593,9 @@
return;
}
- const ObjCInterfaceDecl *ReceiverClass = 0;
- llvm::Value *Receiver;
- if (E->isClassReceiver()) {
- ReceiverClass = E->getClassReceiver();
- Receiver = CGM.getObjCRuntime().GetClass(Builder, ReceiverClass);
- } else {
- Receiver = EmitScalarExpr(E->getBase());
- }
+ llvm::Value *Receiver = Dst.getPropertyRefBaseAddr();
+ const ObjCInterfaceDecl *ReceiverClass
+ = (E->isClassReceiver() ? E->getClassReceiver() : 0);
CallArgList Args;
Args.push_back(std::make_pair(Src, ArgType));
Modified: cfe/trunk/lib/CodeGen/CGValue.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGValue.h?rev=120884&r1=120883&r2=120884&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGValue.h (original)
+++ cfe/trunk/lib/CodeGen/CGValue.h Fri Dec 3 20:32:38 2010
@@ -108,10 +108,8 @@
VectorElt, // This is a vector element l-value (V[i]), use getVector*
BitField, // This is a bitfield l-value, use getBitfield*.
ExtVectorElt, // This is an extended vector subset, use getExtVectorComp
- PropertyRef, // This is an Objective-C property reference, use
+ PropertyRef // This is an Objective-C property reference, use
// getPropertyRefExpr
- KVCRef // This is an objective-c 'implicit' property ref,
- // use getKVCRefExpr
} LVType;
llvm::Value *V;
@@ -177,7 +175,6 @@
bool isBitField() const { return LVType == BitField; }
bool isExtVectorElt() const { return LVType == ExtVectorElt; }
bool isPropertyRef() const { return LVType == PropertyRef; }
- bool isKVCRef() const { return LVType == KVCRef; }
bool isVolatileQualified() const { return Quals.hasVolatile(); }
bool isRestrictQualified() const { return Quals.hasRestrict(); }
@@ -245,14 +242,12 @@
}
// property ref lvalue
- const ObjCPropertyRefExpr *getPropertyRefExpr() const {
+ llvm::Value *getPropertyRefBaseAddr() const {
assert(isPropertyRef());
- return PropertyRefExpr;
+ return V;
}
-
- // 'implicit' property ref lvalue
- const ObjCPropertyRefExpr *getKVCRefExpr() const {
- assert(isKVCRef());
+ const ObjCPropertyRefExpr *getPropertyRefExpr() const {
+ assert(isPropertyRef());
return PropertyRefExpr;
}
@@ -309,20 +304,12 @@
// the lvalue. However, this complicates the code a bit, and I haven't figured
// out how to make it go wrong yet.
static LValue MakePropertyRef(const ObjCPropertyRefExpr *E,
- unsigned CVR) {
+ llvm::Value *Base) {
LValue R;
R.LVType = PropertyRef;
+ R.V = Base;
R.PropertyRefExpr = E;
- R.Initialize(Qualifiers::fromCVRMask(CVR));
- return R;
- }
-
- static LValue MakeKVCRef(const ObjCPropertyRefExpr *E,
- unsigned CVR) {
- LValue R;
- R.LVType = KVCRef;
- R.PropertyRefExpr = E;
- R.Initialize(Qualifiers::fromCVRMask(CVR));
+ R.Initialize(Qualifiers());
return R;
}
};
Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=120884&r1=120883&r2=120884&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Fri Dec 3 20:32:38 2010
@@ -1382,9 +1382,8 @@
RValue EmitLoadOfLValue(LValue V, QualType LVType);
RValue EmitLoadOfExtVectorElementLValue(LValue V, QualType LVType);
RValue EmitLoadOfBitfieldLValue(LValue LV, QualType ExprType);
- RValue EmitLoadOfPropertyRefLValue(LValue LV, QualType ExprType);
- RValue EmitLoadOfKVCRefLValue(LValue LV, QualType ExprType);
-
+ RValue EmitLoadOfPropertyRefLValue(LValue LV,
+ ReturnValueSlot Return = ReturnValueSlot());
/// EmitStoreThroughLValue - Store the specified rvalue into the specified
/// lvalue, where both are guaranteed to the have the same type, and that type
@@ -1392,8 +1391,7 @@
void EmitStoreThroughLValue(RValue Src, LValue Dst, QualType Ty);
void EmitStoreThroughExtVectorComponentLValue(RValue Src, LValue Dst,
QualType Ty);
- void EmitStoreThroughPropertyRefLValue(RValue Src, LValue Dst, QualType Ty);
- void EmitStoreThroughKVCRefLValue(RValue Src, LValue Dst, QualType Ty);
+ void EmitStoreThroughPropertyRefLValue(RValue Src, LValue Dst);
/// EmitStoreThroughLValue - Store Src into Dst with same constraints as
/// EmitStoreThroughLValue.
@@ -1544,11 +1542,8 @@
llvm::Value *EmitObjCSelectorExpr(const ObjCSelectorExpr *E);
RValue EmitObjCMessageExpr(const ObjCMessageExpr *E,
ReturnValueSlot Return = ReturnValueSlot());
- RValue EmitObjCPropertyGet(const ObjCPropertyRefExpr *E,
- ReturnValueSlot Return = ReturnValueSlot());
RValue EmitObjCSuperPropertyGet(const Expr *Exp, const Selector &S,
ReturnValueSlot Return = ReturnValueSlot());
- void EmitObjCPropertySet(const ObjCPropertyRefExpr *E, RValue Src);
void EmitObjCSuperPropertySet(const Expr *E, const Selector &S, RValue Src);
More information about the cfe-commits
mailing list