don't internalize available_externally functions, they are
authorChris Lattner <sabre@nondot.org>
Sat, 3 Apr 2010 05:24:50 +0000 (05:24 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 3 Apr 2010 05:24:50 +0000 (05:24 +0000)
really just declarations.  This is related to PR6524

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100269 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/Internalize.cpp

index 3d319320862dd5ad444f3563431f0cbc95a04585..47abb7dfd812137b4fa08adebe45d399711214c8 100644 (file)
@@ -156,6 +156,8 @@ bool InternalizePass::runOnModule(Module &M) {
   for (Module::global_iterator I = M.global_begin(), E = M.global_end();
        I != E; ++I)
     if (!I->isDeclaration() && !I->hasLocalLinkage() &&
+        // Available externally is really just a "declaration with a body".
+        !I->hasAvailableExternallyLinkage() &&
         !ExternalNames.count(I->getName())) {
       I->setLinkage(GlobalValue::InternalLinkage);
       Changed = true;
@@ -167,6 +169,8 @@ bool InternalizePass::runOnModule(Module &M) {
   for (Module::alias_iterator I = M.alias_begin(), E = M.alias_end();
        I != E; ++I)
     if (!I->isDeclaration() && !I->hasInternalLinkage() &&
+        // Available externally is really just a "declaration with a body".
+        !I->hasAvailableExternallyLinkage() &&
         !ExternalNames.count(I->getName())) {
       I->setLinkage(GlobalValue::InternalLinkage);
       Changed = true;