diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp index 3e54e279573e..e90ce166962e 100644 --- a/llvm/lib/Linker/LinkModules.cpp +++ b/llvm/lib/Linker/LinkModules.cpp @@ -1426,7 +1426,7 @@ bool ModuleLinker::linkGlobalValueProto(GlobalValue *SGV) { std::tie(SK, LinkFromSrc) = ComdatsChosen[SC]; C = DstM.getOrInsertComdat(SC->getName()); C->setSelectionKind(SK); - if (SGV->hasInternalLinkage()) + if (SGV->hasLocalLinkage()) LinkFromSrc = true; } else if (DGV) { if (shouldLinkFromSource(LinkFromSrc, *DGV, *SGV)) diff --git a/llvm/test/Linker/Inputs/comdat15.ll b/llvm/test/Linker/Inputs/comdat15.ll new file mode 100644 index 000000000000..5d2d41bba6aa --- /dev/null +++ b/llvm/test/Linker/Inputs/comdat15.ll @@ -0,0 +1,6 @@ +$a1 = comdat any +@baz = private global i32 42, comdat($a1) +@a1 = internal alias i32, i32* @baz +define i32* @abc() { + ret i32* @a1 +} diff --git a/llvm/test/Linker/comdat15.ll b/llvm/test/Linker/comdat15.ll new file mode 100644 index 000000000000..cf900263105a --- /dev/null +++ b/llvm/test/Linker/comdat15.ll @@ -0,0 +1,9 @@ +; RUN: llvm-link -S %s %p/Inputs/comdat15.ll -o - | FileCheck %s + +$a1 = comdat any +@bar = global i32 0, comdat($a1) + +; CHECK: @bar = global i32 0, comdat($a1) +; CHECK: @baz = private global i32 42, comdat($a1) +; CHECK: @a1 = internal alias i32, i32* @baz +