summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Linker/IRMover.cpp2
-rw-r--r--llvm/test/Linker/Inputs/available_externally_over_decl.ll5
-rw-r--r--llvm/test/Linker/available_externally_over_decl.ll8
3 files changed, 13 insertions, 2 deletions
diff --git a/llvm/lib/Linker/IRMover.cpp b/llvm/lib/Linker/IRMover.cpp
index 20a82327e19..251cfb71894 100644
--- a/llvm/lib/Linker/IRMover.cpp
+++ b/llvm/lib/Linker/IRMover.cpp
@@ -831,7 +831,7 @@ static bool useExistingDest(GlobalValue &SGV, GlobalValue *DGV,
if (SGV.isDeclaration())
return true;
- if (DGV->isDeclarationForLinker())
+ if (DGV->isDeclarationForLinker() && !SGV.isDeclarationForLinker())
return false;
if (ShouldLink)
diff --git a/llvm/test/Linker/Inputs/available_externally_over_decl.ll b/llvm/test/Linker/Inputs/available_externally_over_decl.ll
index b440fde9214..6bd0a939957 100644
--- a/llvm/test/Linker/Inputs/available_externally_over_decl.ll
+++ b/llvm/test/Linker/Inputs/available_externally_over_decl.ll
@@ -1,5 +1,10 @@
@h = global void ()* @f
+@h2 = global void ()* @g
define available_externally void @f() {
ret void
}
+
+define available_externally void @g() {
+ ret void
+}
diff --git a/llvm/test/Linker/available_externally_over_decl.ll b/llvm/test/Linker/available_externally_over_decl.ll
index e220b17edf7..0104967ef54 100644
--- a/llvm/test/Linker/available_externally_over_decl.ll
+++ b/llvm/test/Linker/available_externally_over_decl.ll
@@ -2,8 +2,14 @@
declare void @f()
+define available_externally void @g() {
+ ret void
+}
+
define void ()* @main() {
+ call void @g()
ret void ()* @f
}
-; CHECK: define available_externally void @f() {
+; CHECK-DAG: define available_externally void @g() {
+; CHECK-DAG: define available_externally void @f() {
OpenPOWER on IntegriCloud