diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2011-11-03 21:39:02 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2011-11-03 21:39:02 +0000 |
commit | 1bb94a417a53a524784ec98f232acc70e62370b2 (patch) | |
tree | 30bcbd285f2d87e6de8fc378d92186fb2df6d4c6 /lib/CodeGen/CGCall.cpp | |
parent | 05272a659437fc6ec7fa5a7c3f3fc6eb220a6fa2 (diff) |
Fix alignment on alloca's for parameters using ABIArgInfo::Expand.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@143658 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGCall.cpp')
-rw-r--r-- | lib/CodeGen/CGCall.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index 6e3b70cef8..92ac5ae560 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -1058,10 +1058,11 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI, // If this structure was expanded into multiple arguments then // we need to create a temporary and reconstruct it from the // arguments. - llvm::Value *Temp = CreateMemTemp(Ty, Arg->getName() + ".addr"); - llvm::Function::arg_iterator End = - ExpandTypeFromArgs(Ty, MakeAddrLValue(Temp, Ty), AI); - EmitParmDecl(*Arg, Temp, ArgNo); + llvm::AllocaInst *Alloca = CreateMemTemp(Ty); + Alloca->setAlignment(getContext().getDeclAlign(Arg).getQuantity()); + LValue LV = MakeAddrLValue(Alloca, Ty, Alloca->getAlignment()); + llvm::Function::arg_iterator End = ExpandTypeFromArgs(Ty, LV, AI); + EmitParmDecl(*Arg, Alloca, ArgNo); // Name the arguments used in expansion and increment AI. unsigned Index = 0; |