rdar://7119244 - globals with an explicit section specified don't get

common linkage.

llvm-svn: 78158
This commit is contained in:
Chris Lattner 2009-08-05 04:56:58 +00:00
parent 13b860992a
commit c0693bc2ea
2 changed files with 10 additions and 2 deletions

View File

@ -883,7 +883,8 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
else if (D->hasAttr<WeakAttr>())
GV->setLinkage(llvm::GlobalVariable::WeakAnyLinkage);
else if (!CompileOpts.NoCommon &&
(!D->hasExternalStorage() && !D->getInit()))
!D->hasExternalStorage() && !D->getInit() &&
!D->getAttr<SectionAttr>())
GV->setLinkage(llvm::GlobalVariable::CommonLinkage);
else
GV->setLinkage(llvm::GlobalVariable::ExternalLinkage);

View File

@ -1,7 +1,14 @@
// RUN: clang-cc -emit-llvm -o - %s | not grep "common"
// RUN: clang-cc -emit-llvm -o - %s | FileCheck %s
// This checks that the global won't be marked as common.
// (It shouldn't because it's being initialized).
int a;
int a = 242;
// CHECK: @a = global i32 242
// This shouldn't be emitted as common because it has an explicit section.
// rdar://7119244
int b __attribute__((section("foo")));
// CHECK: @b = global i32 0, section "foo"