Fix another case where the linkage was not set.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 10 Dec 2015 18:44:26 +0000 (18:44 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 10 Dec 2015 18:44:26 +0000 (18:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255272 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Linker/IRMover.cpp
test/Linker/Inputs/available_externally_over_decl.ll
test/Linker/available_externally_over_decl.ll

index 20a8232..251cfb7 100644 (file)
@@ -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)
index b440fde..6bd0a93 100644 (file)
@@ -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
+}
index e220b17..0104967 100644 (file)
@@ -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() {