summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Linker/LinkModules.cpp2
-rw-r--r--llvm/test/Linker/Inputs/comdat15.ll6
-rw-r--r--llvm/test/Linker/comdat15.ll9
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
+
OpenPOWER on IntegriCloud