Don't internalize linkonce_odr non constant variables.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200983 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2014-02-07 19:04:43 +00:00
parent 11b8b43196
commit 1e75dec97a
2 changed files with 15 additions and 1 deletions

View File

@ -349,6 +349,7 @@ void LTOModule::addDefinedFunctionSymbol(const Function *f) {
}
static bool canBeHidden(const GlobalValue *GV) {
// FIXME: this is duplicated with another static function in AsmPrinter.cpp
GlobalValue::LinkageTypes L = GV->getLinkage();
if (L != GlobalValue::LinkOnceODRLinkage)
@ -357,6 +358,13 @@ static bool canBeHidden(const GlobalValue *GV) {
if (GV->hasUnnamedAddr())
return true;
// If it is a non constant variable, it needs to be uniqued across shared
// objects.
if (const GlobalVariable *Var = dyn_cast<GlobalVariable>(GV)) {
if (!Var->isConstant())
return false;
}
GlobalStatus GS;
if (GlobalStatus::analyzeGlobal(GV, GS))
return false;

View File

@ -1,6 +1,6 @@
; RUN: llvm-as < %s >%t1
; RUN: llvm-lto -o %t2 -dso-symbol=foo1 -dso-symbol=foo2 -dso-symbol=foo3 \
; RUN: -dso-symbol=foo4 %t1 -disable-opt
; RUN: -dso-symbol=foo4 -dso-symbol=v1 -dso-symbol=v2 %t1 -disable-opt
; RUN: llvm-nm %t2 | FileCheck %s
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
@ -26,6 +26,12 @@ define linkonce_odr void @foo4() noinline {
ret void
}
; CHECK: r v1
@v1 = linkonce_odr constant i32 32
; CHECK: V v2
@v2 = linkonce_odr global i32 32
declare void @f(void()*)
declare void @p()