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 20a82327e198f5e88c7f5d1883935abb133f6ab3..251cfb71894b0ec0d5fa4505380c002f7ca709fc 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 b440fde921448e88ae5663fa78ed0c36d6e59bf1..6bd0a939957be66e75e35e4676624f5b6b95c9ca 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 e220b17edf72b00bb241c5eeef8a1072322c123f..0104967ef544a5289b4c2282d789778ad144a9f9 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() {