From: Daniel Dunbar Date: Thu, 12 Feb 2009 23:32:54 +0000 (+0000) Subject: Honor attribute section on static block var decls. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=30510abee628c645285e01cfd4779610d46a822c;p=clang Honor attribute section on static block var decls. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64411 91177308-0d34-0410-b5e6-96231b3b80d8 --- 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()) { 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()) + 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; +}