From 12ce59d3c58ec4397e38b5acf2dd654ed578439e Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 31 May 2003 21:08:45 +0000 Subject: [PATCH] Fix bug: FuncResolve/2003-05-31-InternalDecl.ll 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 | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/Transforms/IPO/FunctionResolution.cpp b/lib/Transforms/IPO/FunctionResolution.cpp index 5b2e39fdad4..18a28895fdc 100644 --- a/lib/Transforms/IPO/FunctionResolution.cpp +++ b/lib/Transforms/IPO/FunctionResolution.cpp @@ -193,9 +193,14 @@ static bool ResolveFunctions(Module &M, std::vector &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(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); } }