Fix bug: FuncResolve/2003-05-31-InternalDecl.ll
authorChris Lattner <sabre@nondot.org>
Sat, 31 May 2003 21:08:45 +0000 (21:08 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 31 May 2003 21:08:45 +0000 (21:08 +0000)
Count resolutions correctly.

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

lib/Transforms/IPO/FunctionResolution.cpp

index 5b2e39fdad4abff7f989a93c581870c38343dcc4..18a28895fdcf3c9dcf8b8ef6261b0e8596e7e735 100644 (file)
@@ -193,9 +193,14 @@ static bool ResolveFunctions(Module &M, std::vector<GlobalValue*> &Globals,
       // If there are any more uses that we could not resolve, force them to use
       // a casted pointer now.
       if (!Old->use_empty()) {
+        NumResolved += Old->use_size();
         Constant *NewCPR = ConstantPointerRef::get(Concrete);
         Old->replaceAllUsesWith(ConstantExpr::getCast(NewCPR, Old->getType()));
+        Changed = true;
       }
+
+      // Since there are no uses of Old anymore, remove it from the module.
+      M.getFunctionList().erase(Old);
     }
   return Changed;
 }
@@ -345,8 +350,7 @@ bool FunctionResolvingPass::run(Module &M) {
         GlobalValue *GV = cast<GlobalValue>(PI->second);
         assert(PI->first == GV->getName() &&
                "Global name and symbol table do not agree!");
-        if (!GV->hasInternalLinkage())  // Only resolve decls to external fns
-          Globals[PI->first].push_back(GV);
+        Globals[PI->first].push_back(GV);
       }
     }