diff options
-rw-r--r-- | llvm/lib/Linker/LinkModules.cpp | 2 | ||||
-rw-r--r-- | llvm/test/Linker/Inputs/comdat15.ll | 6 | ||||
-rw-r--r-- | llvm/test/Linker/comdat15.ll | 9 |
3 files changed, 16 insertions, 1 deletions
diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp index 3e54e279573..e90ce166962 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 00000000000..5d2d41bba6a --- /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 00000000000..cf900263105 --- /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 + |