From dc5ea09c4d0a23b1cd28f763869ef2bcb5dc119a Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Sat, 18 Sep 2010 20:47:25 +0000 Subject: Fixes IRgen bug in objc++ reference binding of a getter expression. Fixes // rdar://8437240 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@114299 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGExpr.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'lib/CodeGen/CGExpr.cpp') diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index 924ca3ec4b..9b69297bbe 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -196,7 +196,15 @@ EmitExprForReferenceBinding(CodeGenFunction &CGF, const Expr *E, if (E->isLvalue(CGF.getContext()) == Expr::LV_Valid) { // Emit the expression as an lvalue. LValue LV = CGF.EmitLValue(E); - + if (LV.isPropertyRef() || LV.isKVCRef()) { + QualType QT = E->getType(); + RValue RV = + LV.isPropertyRef() ? CGF.EmitLoadOfPropertyRefLValue(LV, QT) + : CGF.EmitLoadOfKVCRefLValue(LV, QT); + assert(RV.isScalar() && "EmitExprForReferenceBinding"); + return RV.getScalarVal(); + } + if (LV.isSimple()) return LV.getAddress(); -- cgit v1.2.3-70-g09d2