diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2011-02-01 05:33:52 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2011-02-01 05:33:52 +0000 |
commit | 4a9b18d07b750cb28066f9fc4534ba1968768a6e (patch) | |
tree | b4439565c1cb33ac99c421a52c063e433757f925 /llvm/lib/Linker/LinkModules.cpp | |
parent | 9b62fd2fdaf3903627ee7d8496c5f3e7733a8540 (diff) | |
download | llvm-4a9b18d07b750cb28066f9fc4534ba1968768a6e.zip llvm-4a9b18d07b750cb28066f9fc4534ba1968768a6e.tar.gz llvm-4a9b18d07b750cb28066f9fc4534ba1968768a6e.tar.bz2 |
Correctly merge available_externally and regular definitions when they have
different visibilities.
llvm-svn: 124650
Diffstat (limited to 'llvm/lib/Linker/LinkModules.cpp')
-rw-r--r-- | llvm/lib/Linker/LinkModules.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp index ec39c93..5aa06ab 100644 --- a/llvm/lib/Linker/LinkModules.cpp +++ b/llvm/lib/Linker/LinkModules.cpp @@ -434,8 +434,10 @@ static bool GetLinkageResult(GlobalValue *Dest, const GlobalValue *Src, } // Check visibility - if (Dest && Src->getVisibility() != Dest->getVisibility()) - if (!Src->isDeclaration() && !Dest->isDeclaration()) + if (Dest && Src->getVisibility() != Dest->getVisibility() && + !Src->isDeclaration() && !Dest->isDeclaration() && + !Src->hasAvailableExternallyLinkage() && + !Dest->hasAvailableExternallyLinkage()) return Error(Err, "Linking globals named '" + Src->getName() + "': symbols have different visibilities!"); return false; |