diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-12-10 18:44:26 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-12-10 18:44:26 +0000 |
commit | a8547d35e95a73a66ad718d9f76034b2c878e6ca (patch) | |
tree | c73e73f569814cf242b0ab1c122d72492bcc39b7 | |
parent | 2611ff8a2791552cd85a60d4e2d6455d5e54248e (diff) | |
download | bcm5719-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.cpp | 2 | ||||
-rw-r--r-- | llvm/test/Linker/Inputs/available_externally_over_decl.ll | 5 | ||||
-rw-r--r-- | llvm/test/Linker/available_externally_over_decl.ll | 8 |
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() { |