summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-12-10 18:44:26 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-12-10 18:44:26 +0000
commita8547d35e95a73a66ad718d9f76034b2c878e6ca (patch)
treec73e73f569814cf242b0ab1c122d72492bcc39b7
parent2611ff8a2791552cd85a60d4e2d6455d5e54248e (diff)
downloadbcm5719-llvm-a8547d35e95a73a66ad718d9f76034b2c878e6ca.tar.gz
bcm5719-llvm-a8547d35e95a73a66ad718d9f76034b2c878e6ca.zip
Fix another case where the linkage was not set.
llvm-svn: 255272
-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