irgen for references to complex rvales (Very important...)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72157 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index eaf0873..0886ad0 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -79,11 +79,17 @@
   }
   
   if (!hasAggregateLLVMType(E->getType())) {
-    // Make a temporary variable that we can bind the reference to.
+    // Create a temporary variable that we can bind the reference to.
     llvm::Value *Temp = CreateTempAlloca(ConvertTypeForMem(E->getType()), 
                                          "reftmp");
     EmitStoreOfScalar(EmitScalarExpr(E), Temp, false, E->getType());
     return RValue::get(Temp);
+  } else if (E->getType()->isAnyComplexType()) {
+    // Create a temporary variable that we can bind the reference to.
+    llvm::Value *Temp = CreateTempAlloca(ConvertTypeForMem(E->getType()), 
+                                         "reftmp");
+    EmitComplexExprIntoAddr(E, Temp, false);
+    return RValue::get(Temp);
   }
   
   CGM.ErrorUnsupported(E, "reference binding");