]> granicus.if.org Git - clang/commitdiff
Handle complex return values.
authorAnders Carlsson <andersca@mac.com>
Sat, 15 Nov 2008 01:29:05 +0000 (01:29 +0000)
committerAnders Carlsson <andersca@mac.com>
Sat, 15 Nov 2008 01:29:05 +0000 (01:29 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59345 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGCall.cpp

index b0a672b6b1052f69d471e91cf52cc0986a6f4618..62d5f9fc48a0d0039f8e21d282b2cdcd5c3e872e 100644 (file)
@@ -751,7 +751,12 @@ void CodeGenFunction::EmitFunctionEpilog(QualType RetTy,
     
     switch (RetAI.getKind()) {
     case ABIArgInfo::StructRet:
-      EmitAggregateCopy(CurFn->arg_begin(), ReturnValue, RetTy);
+        if (RetTy->isAnyComplexType()) {
+          // FIXME: Volatile
+          ComplexPairTy RT = LoadComplexFromAddr(ReturnValue, false);
+          StoreComplexToAddr(RT, ReturnValue, false);
+        } else
+          EmitAggregateCopy(CurFn->arg_begin(), ReturnValue, RetTy);
       break;
 
     case ABIArgInfo::Default: