OSDN Git Service

Fix PR26152.
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Wed, 20 Jan 2016 22:05:50 +0000 (22:05 +0000)
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Wed, 20 Jan 2016 22:05:50 +0000 (22:05 +0000)
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.

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

lib/Linker/IRMover.cpp
test/Linker/Inputs/alias-2.ll [new file with mode: 0644]
test/Linker/alias-2.ll [new file with mode: 0644]

index de36849..9fdf8ca 100644 (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) {
diff --git a/test/Linker/Inputs/alias-2.ll b/test/Linker/Inputs/alias-2.ll
new file mode 100644 (file)
index 0000000..03c1d91
--- /dev/null
@@ -0,0 +1,7 @@
+define void @B() {
+  call void @A()
+  ret void
+}
+
+declare void @A()
+
diff --git a/test/Linker/alias-2.ll b/test/Linker/alias-2.ll
new file mode 100644 (file)
index 0000000..8875aa7
--- /dev/null
@@ -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()