From eadd3e81a04ec492301333502f74f97e98215849 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Thu, 3 Nov 2011 20:31:28 +0000 Subject: [PATCH] Fix the alignment on scalar parameter variables so that it matches what the AST thinks it should be. Per report on cfe-dev. llvm-svn: 143645 --- clang/lib/CodeGen/CGDecl.cpp | 5 ++++- clang/test/CodeGen/align-param.c | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 clang/test/CodeGen/align-param.c diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp index a6147ea7658b..384d92a9bf42 100644 --- a/clang/lib/CodeGen/CGDecl.cpp +++ b/clang/lib/CodeGen/CGDecl.cpp @@ -1442,7 +1442,10 @@ void CodeGenFunction::EmitParmDecl(const VarDecl &D, llvm::Value *Arg, DeclPtr = Arg; } else { // Otherwise, create a temporary to hold the value. - DeclPtr = CreateMemTemp(Ty, D.getName() + ".addr"); + llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertTypeForMem(Ty), + D.getName() + ".addr"); + Alloc->setAlignment(getContext().getDeclAlign(&D).getQuantity()); + DeclPtr = Alloc; bool doStore = true; diff --git a/clang/test/CodeGen/align-param.c b/clang/test/CodeGen/align-param.c new file mode 100644 index 000000000000..15a8c2a79a3c --- /dev/null +++ b/clang/test/CodeGen/align-param.c @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -emit-llvm -triple i386-apple-macosx10.7.2 < %s | FileCheck %s + +// The preferred alignment for a long long on x86-32 is 8; make sure the +// alloca for x uses that alignment. +int test (long long x) { + return (int)x; +} +// CHECK: define i32 @test +// CHECK: alloca i64, align 8 -- GitLab