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 | 3d9f47fe6f9ac0f4b47b443a12f118e1f30a70bb (patch) | |
| tree | 42e4e893e83bb96b5e7e89fbe4d6b708eb7f71a5 /clang/lib/CodeGen | |
| parent | 52d00e4815bc4c89016c9e57fbfffb6513b68c6d (diff) | |
| download | bcm5719-llvm-3d9f47fe6f9ac0f4b47b443a12f118e1f30a70bb.tar.gz bcm5719-llvm-3d9f47fe6f9ac0f4b47b443a12f118e1f30a70bb.zip | |
Fix alignment on alloca's for parameters using ABIArgInfo::Expand.
llvm-svn: 143658
Diffstat (limited to 'clang/lib/CodeGen')
| -rw-r--r-- | clang/lib/CodeGen/CGCall.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index 6e3b70cef85..92ac5ae560e 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/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; |

