Fix PR26152.

Fix the condition for when the new global takes over the name of
the existing one to be the negation of the condition for the new
global to get internal linkage.

llvm-svn: 258355
This commit is contained in:
Evgeniy Stepanov 2016-01-20 22:05:50 +00:00
parent b640415f9b
commit 9fb70f53ce
3 changed files with 32 additions and 1 deletions

View File

@ -1087,7 +1087,7 @@ Constant *IRLinker::linkGlobalValueProto(GlobalValue *SGV, bool ForAlias) {
return nullptr;
NewGV = copyGlobalValueProto(SGV, ShouldLink);
if (!ForAlias)
if (ShouldLink || !ForAlias)
forceRenaming(NewGV, SGV->getName());
}
if (ShouldLink || ForAlias) {

View File

@ -0,0 +1,7 @@
define void @B() {
call void @A()
ret void
}
declare void @A()

View File

@ -0,0 +1,24 @@
; RUN: llvm-link %s %S/Inputs/alias-2.ll -S -o - | FileCheck %s
; RUN: llvm-link %S/Inputs/alias-2.ll %s -S -o - | FileCheck %s
; Test the fix for PR26152, where A from the second module is
; erroneously renamed to A.1 and not linked to the declaration from
; the first module
@C = alias void (), void ()* @A
define void @D() {
call void @C()
ret void
}
define void @A() {
ret void
}
; CHECK-DAG: @C = alias void (), void ()* @A
; CHECK-DAG: define void @B()
; CHECK-DAG: call void @A()
; CHECK-DAG: define void @D()
; CHECK-DAG: call void @C()
; CHECK-DAG: define void @A()