Fix API gen for objc_msgSend property of aggregate types
in Objective-c++ mode. Fixes radar 7986354.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103887 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGExprCXX.cpp b/lib/CodeGen/CGExprCXX.cpp
index 22626fc..06d26a4 100644
--- a/lib/CodeGen/CGExprCXX.cpp
+++ b/lib/CodeGen/CGExprCXX.cpp
@@ -264,9 +264,11 @@
       LValue LV = EmitLValue(E->getArg(0));
       llvm::Value *This;
       if (LV.isPropertyRef()) {
-        RValue RV = EmitLoadOfPropertyRefLValue(LV, E->getArg(0)->getType());
-        assert (!RV.isScalar() && "EmitCXXOperatorMemberCallExpr");
-        This = RV.getAggregateAddr();
+        llvm::Value *AggLoc  = CreateMemTemp(E->getArg(0)->getType());
+        EmitAggExpr(E->getArg(1), AggLoc, false /*VolatileDest*/);
+        EmitObjCPropertySet(LV.getPropertyRefExpr(),
+                            RValue::getAggregate(AggLoc, false /*VolatileDest*/));
+        return RValue::getAggregate(0, false);
       }
       else
         This = LV.getAddress();
@@ -285,9 +287,11 @@
   LValue LV = EmitLValue(E->getArg(0));
   llvm::Value *This;
   if (LV.isPropertyRef()) {
-    RValue RV = EmitLoadOfPropertyRefLValue(LV, E->getArg(0)->getType());
-    assert (!RV.isScalar() && "EmitCXXOperatorMemberCallExpr");
-    This = RV.getAggregateAddr();
+    llvm::Value *AggLoc  = CreateMemTemp(E->getArg(0)->getType());
+    EmitAggExpr(E->getArg(1), AggLoc, false /*VolatileDest*/);
+    EmitObjCPropertySet(LV.getPropertyRefExpr(),
+                        RValue::getAggregate(AggLoc, false /*VolatileDest*/));
+    return RValue::getAggregate(0, false);
   }
   else
     This = LV.getAddress();