summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Linker/LinkModules.cpp5
-rw-r--r--llvm/test/Linker/Inputs/linkage2.ll1
-rw-r--r--llvm/test/Linker/linkage2.ll6
3 files changed, 10 insertions, 2 deletions
diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp
index d02d590ca10..14c6a10c339 100644
--- a/llvm/lib/Linker/LinkModules.cpp
+++ b/llvm/lib/Linker/LinkModules.cpp
@@ -721,8 +721,9 @@ bool ModuleLinker::getLinkageResult(GlobalValue *Dest, const GlobalValue *Src,
} else if (Src->isWeakForLinker()) {
assert(!Dest->hasExternalWeakLinkage());
assert(!Dest->hasAvailableExternallyLinkage());
- if (Dest->hasLinkOnceLinkage() &&
- (Src->hasWeakLinkage() || Src->hasCommonLinkage())) {
+ if ((Dest->hasLinkOnceLinkage() && Src->hasWeakLinkage()) ||
+ ((Dest->hasLinkOnceLinkage() || Dest->hasWeakLinkage()) &&
+ Src->hasCommonLinkage())) {
LinkFromSrc = true;
LT = Src->getLinkage();
} else {
diff --git a/llvm/test/Linker/Inputs/linkage2.ll b/llvm/test/Linker/Inputs/linkage2.ll
new file mode 100644
index 00000000000..3f6963ec4c7
--- /dev/null
+++ b/llvm/test/Linker/Inputs/linkage2.ll
@@ -0,0 +1 @@
+@test1_a = weak global i8 1
diff --git a/llvm/test/Linker/linkage2.ll b/llvm/test/Linker/linkage2.ll
new file mode 100644
index 00000000000..2ecdc1ff30a
--- /dev/null
+++ b/llvm/test/Linker/linkage2.ll
@@ -0,0 +1,6 @@
+; RUN: llvm-link %s %p/Inputs/linkage2.ll -S | FileCheck %s
+; RUN: llvm-link %p/Inputs/linkage2.ll %s -S | FileCheck %s
+
+@test1_a = common global i8 0
+
+; CHECK: @test1_a = common global i8 0
OpenPOWER on IntegriCloud