From 1078d1185400cb0f7a6e7971346e3534d8d9ff72 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 23 Jul 2003 22:03:18 +0000 Subject: [PATCH] Fix bug: FunctionResolve/2003-07-23-CPR-Reference.ll This fixes a long time annoyance which caused prototypes for bzero, bcopy, bcmp, fputs, and fputs_unlocked to never get deleted. Grr. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7285 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/IPO/FunctionResolution.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/Transforms/IPO/FunctionResolution.cpp b/lib/Transforms/IPO/FunctionResolution.cpp index 8acddf59008..86352d46a80 100644 --- a/lib/Transforms/IPO/FunctionResolution.cpp +++ b/lib/Transforms/IPO/FunctionResolution.cpp @@ -80,12 +80,14 @@ static bool ResolveFunctions(Module &M, std::vector &Globals, // functions and that the Old function has no varargs fns specified. In // otherwords it's just (...) // - Value *Replacement = Concrete; - if (Concrete->getType() != Old->getType()) - Replacement = ConstantExpr::getCast(ConstantPointerRef::get(Concrete), - Old->getType()); - NumResolved += Old->use_size(); - Old->replaceAllUsesWith(Replacement); + if (!Old->use_empty()) { // Avoid making the CPR unless we really need it + Value *Replacement = Concrete; + if (Concrete->getType() != Old->getType()) + Replacement = ConstantExpr::getCast(ConstantPointerRef::get(Concrete), + Old->getType()); + NumResolved += Old->use_size(); + Old->replaceAllUsesWith(Replacement); + } // Since there are no uses of Old anymore, remove it from the module. M.getFunctionList().erase(Old); -- 2.34.1