diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-03-23 18:43:00 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-03-23 18:43:00 +0000 |
commit | 707ea283f5514e2cb633a89f702190f0d798c7ea (patch) | |
tree | ce24f33b0133e766acda30038acb4a3bca18350d /lib/CodeGen | |
parent | 7986ad5f8de58987a3f3f5ec27d6e765f9e14c9a (diff) |
Code gen for compound assignment of complex
types using property syntax to access setter/getters.
(also radar 7351147).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99307 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/CGExprComplex.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/CodeGen/CGExprComplex.cpp b/lib/CodeGen/CGExprComplex.cpp index ee104b7635..0a0c9149b4 100644 --- a/lib/CodeGen/CGExprComplex.cpp +++ b/lib/CodeGen/CGExprComplex.cpp @@ -524,13 +524,14 @@ EmitCompoundAssign(const CompoundAssignOperator *E, OpInfo.RHS = EmitCast(E->getRHS(), OpInfo.Ty); LValue LHSLV = CGF.EmitLValue(E->getLHS()); - assert(!LHSLV.isKVCRef() && - "setter/getter access of complex using property syntax NYI"); // We know the LHS is a complex lvalue. ComplexPairTy LHSComplexPair; if (LHSLV.isPropertyRef()) LHSComplexPair = CGF.EmitObjCPropertyGet(LHSLV.getPropertyRefExpr()).getComplexVal(); + else if (LHSLV.isKVCRef()) + LHSComplexPair = + CGF.EmitObjCPropertyGet(LHSLV.getKVCRefExpr()).getComplexVal(); else LHSComplexPair = EmitLoadOfComplex(LHSLV.getAddress(), LHSLV.isVolatileQualified()); @@ -547,6 +548,8 @@ EmitCompoundAssign(const CompoundAssignOperator *E, if (LHSLV.isPropertyRef()) CGF.EmitObjCPropertySet(LHSLV.getPropertyRefExpr(), RValue::getComplex(Result)); + else if (LHSLV.isKVCRef()) + CGF.EmitObjCPropertySet(LHSLV.getKVCRefExpr(), RValue::getComplex(Result)); else EmitStoreOfComplex(Result, LHSLV.getAddress(), LHSLV.isVolatileQualified()); // And now return the LHS @@ -556,6 +559,8 @@ EmitCompoundAssign(const CompoundAssignOperator *E, IgnoreImagAssign = ignimag; if (LHSLV.isPropertyRef()) return CGF.EmitObjCPropertyGet(LHSLV.getPropertyRefExpr()).getComplexVal(); + else if (LHSLV.isKVCRef()) + return CGF.EmitObjCPropertyGet(LHSLV.getKVCRefExpr()).getComplexVal(); return EmitLoadOfComplex(LHSLV.getAddress(), LHSLV.isVolatileQualified()); } |