]> granicus.if.org Git - clang/commitdiff
rdar://7119244 - globals with an explicit section specified don't get
authorChris Lattner <sabre@nondot.org>
Wed, 5 Aug 2009 04:56:58 +0000 (04:56 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 5 Aug 2009 04:56:58 +0000 (04:56 +0000)
common linkage.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78158 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CodeGenModule.cpp
test/CodeGen/global-init.c

index 08dc9930ba3d9bb8206ce12d3b19c6ae2d2ab174..95ce3e5d3af106113450739dbad90d3c65d33c7e 100644 (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);
index 4b769f8ccbb08b52ab2de82ada5927db1daf27bf..2c4ccce5a664cc255ffc93d1d6afdb6b3024e980 100644 (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"