Index: lib/Linker/IRMover.cpp =================================================================== --- lib/Linker/IRMover.cpp +++ lib/Linker/IRMover.cpp @@ -1087,7 +1087,7 @@ return nullptr; NewGV = copyGlobalValueProto(SGV, ShouldLink); - if (!ForAlias) + if (ShouldLink || !ForAlias) forceRenaming(NewGV, SGV->getName()); } if (ShouldLink || ForAlias) { Index: test/Linker/Inputs/alias-2.ll =================================================================== --- /dev/null +++ test/Linker/Inputs/alias-2.ll @@ -0,0 +1,7 @@ +define void @B() { + call void @A() + ret void +} + +declare void @A() + Index: test/Linker/alias-2.ll =================================================================== --- /dev/null +++ test/Linker/alias-2.ll @@ -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()