From: Anders Carlsson Date: Sat, 15 Nov 2008 01:29:05 +0000 (+0000) Subject: Handle complex return values. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0b685a5e4a473b180b7d2f433aaf09b91d3a0f78;p=clang Handle complex return values. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59345 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index b0a672b6b1..62d5f9fc48 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -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: