From: Rafael Espindola Date: Thu, 10 Dec 2015 18:44:26 +0000 (+0000) Subject: Fix another case where the linkage was not set. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=161d4c68fc259a1896c419bf8b4b0092d1383b83;p=oota-llvm.git Fix another case where the linkage was not set. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255272 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Linker/IRMover.cpp b/lib/Linker/IRMover.cpp index 20a82327e19..251cfb71894 100644 --- a/lib/Linker/IRMover.cpp +++ b/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/test/Linker/Inputs/available_externally_over_decl.ll b/test/Linker/Inputs/available_externally_over_decl.ll index b440fde9214..6bd0a939957 100644 --- a/test/Linker/Inputs/available_externally_over_decl.ll +++ b/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/test/Linker/available_externally_over_decl.ll b/test/Linker/available_externally_over_decl.ll index e220b17edf7..0104967ef54 100644 --- a/test/Linker/available_externally_over_decl.ll +++ b/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() {