Copy construction of non-trivial properties must not
be turned into a setter call (fixes radar 8008649).


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104235 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGExprCXX.cpp b/lib/CodeGen/CGExprCXX.cpp
index bfe967d..eccb6e6 100644
--- a/lib/CodeGen/CGExprCXX.cpp
+++ b/lib/CodeGen/CGExprCXX.cpp
@@ -255,7 +255,6 @@
                                                ReturnValueSlot ReturnValue) {
   assert(MD->isInstance() &&
          "Trying to emit a member call expr on a static method!");
-
   if (MD->isCopyAssignment()) {
     const CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(MD->getDeclContext());
     if (ClassDecl->hasTrivialCopyAssignment()) {
@@ -287,11 +286,9 @@
   LValue LV = EmitLValue(E->getArg(0));
   llvm::Value *This;
   if (LV.isPropertyRef()) {
-    llvm::Value *AggLoc  = CreateMemTemp(E->getArg(1)->getType());
-    EmitAggExpr(E->getArg(1), AggLoc, false /*VolatileDest*/);
-    EmitObjCPropertySet(LV.getPropertyRefExpr(),
-                        RValue::getAggregate(AggLoc, false /*VolatileDest*/));
-    return RValue::getAggregate(0, false);
+    RValue RV = EmitLoadOfPropertyRefLValue(LV, E->getArg(0)->getType());
+    assert (!RV.isScalar() && "EmitCXXOperatorMemberCallExpr");
+    This = RV.getAggregateAddr();
   }
   else
     This = LV.getAddress();