зеркало из https://github.com/microsoft/clang-1.git
Set alignment on static function level decls and VLAs. Fixes PR5060.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82868 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
022a1253c0
Коммит
41f8a13ac7
|
@ -103,10 +103,13 @@ CodeGenFunction::CreateStaticBlockVarDecl(const VarDecl &D,
|
|||
}
|
||||
|
||||
const llvm::Type *LTy = CGM.getTypes().ConvertTypeForMem(Ty);
|
||||
return new llvm::GlobalVariable(CGM.getModule(), LTy,
|
||||
Ty.isConstant(getContext()), Linkage,
|
||||
CGM.EmitNullConstant(D.getType()), Name, 0,
|
||||
D.isThreadSpecified(), Ty.getAddressSpace());
|
||||
llvm::GlobalVariable *GV =
|
||||
new llvm::GlobalVariable(CGM.getModule(), LTy,
|
||||
Ty.isConstant(getContext()), Linkage,
|
||||
CGM.EmitNullConstant(D.getType()), Name, 0,
|
||||
D.isThreadSpecified(), Ty.getAddressSpace());
|
||||
GV->setAlignment(getContext().getDeclAlignInBytes(&D));
|
||||
return GV;
|
||||
}
|
||||
|
||||
void CodeGenFunction::EmitStaticBlockVarDecl(const VarDecl &D) {
|
||||
|
@ -375,8 +378,10 @@ void CodeGenFunction::EmitLocalBlockVarDecl(const VarDecl &D) {
|
|||
false, "tmp");
|
||||
|
||||
// Allocate memory for the array.
|
||||
llvm::Value *VLA = Builder.CreateAlloca(llvm::Type::getInt8Ty(VMContext),
|
||||
VLASize, "vla");
|
||||
llvm::AllocaInst *VLA =
|
||||
Builder.CreateAlloca(llvm::Type::getInt8Ty(VMContext), VLASize, "vla");
|
||||
VLA->setAlignment(getContext().getDeclAlignInBytes(&D));
|
||||
|
||||
DeclPtr = Builder.CreateBitCast(VLA, LElemPtrTy, "tmp");
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
// RUN: clang-cc -emit-llvm %s -o - -verify | FileCheck %s
|
||||
|
||||
// CHECK: @foo.p = internal global i8 0, align 32
|
||||
char *foo(void) {
|
||||
static char p __attribute__((aligned(32)));
|
||||
return &p;
|
||||
}
|
||||
|
||||
void bar(long n) {
|
||||
// CHECK: align 32
|
||||
char p[n] __attribute__((aligned(32)));
|
||||
}
|
||||
|
Загрузка…
Ссылка в новой задаче