diff options
-rw-r--r-- | lib/CodeGen/CGDecl.cpp | 4 | ||||
-rw-r--r-- | test/CodeGen/attributes.c | 9 |
2 files changed, 11 insertions, 2 deletions
diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp index dad50fcec4..a32b78dedb 100644 --- a/lib/CodeGen/CGDecl.cpp +++ b/lib/CodeGen/CGDecl.cpp @@ -126,6 +126,7 @@ void CodeGenFunction::EmitStaticBlockVarDecl(const VarDecl &D) { GV = GenerateStaticBlockVarDecl(D, false, ".", llvm::GlobalValue::InternalLinkage); + // FIXME: Merge attribute handling. if (const AnnotateAttr *AA = D.getAttr<AnnotateAttr>()) { SourceManager &SM = CGM.getContext().getSourceManager(); llvm::Constant *Ann = @@ -134,6 +135,9 @@ void CodeGenFunction::EmitStaticBlockVarDecl(const VarDecl &D) { CGM.AddAnnotation(Ann); } + if (const SectionAttr *SA = D.getAttr<SectionAttr>()) + GV->setSection(SA->getName()); + const llvm::Type *LTy = CGM.getTypes().ConvertTypeForMem(D.getType()); const llvm::Type *LPtrTy = llvm::PointerType::get(LTy, D.getType().getAddressSpace()); diff --git a/test/CodeGen/attributes.c b/test/CodeGen/attributes.c index aa4e3efb1d..171c81081a 100644 --- a/test/CodeGen/attributes.c +++ b/test/CodeGen/attributes.c @@ -11,7 +11,8 @@ // RUN: grep '@t10().*section "SECT"' %t && // RUN: grep '@t11().*section "SECT"' %t && // RUN: grep '@t12 =.*section "SECT"' %t && -// RUN: grep '@t13 =.*section "SECT"' %t +// RUN: grep '@t13 =.*section "SECT"' %t && +// RUN: grep '@t14.x =.*section "SECT"' %t void t1() __attribute__((noreturn)); void t1() {} @@ -41,4 +42,8 @@ void __attribute__((section("SECT"))) t11(void) {} int t12 __attribute__((section("SECT"))); struct s0 { int x; }; -struct s0 t13 __attribute__ ((section ("SECT"))) = { 0 }; +struct s0 t13 __attribute__((section("SECT"))) = { 0 }; + +void t14(void) { + static int x __attribute__((section("SECT"))) = 0; +} |