From f23de86fa3b275cabc6450349dcbbb448ee5952b Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Thu, 20 Nov 2008 01:20:42 +0000 Subject: [PATCH] Do not forget llvm.dbg.declare's first argument while removing debugging information. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59688 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/IPO/StripSymbols.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/Transforms/IPO/StripSymbols.cpp b/lib/Transforms/IPO/StripSymbols.cpp index 6a0458c5128..7e225e2bd55 100644 --- a/lib/Transforms/IPO/StripSymbols.cpp +++ b/lib/Transforms/IPO/StripSymbols.cpp @@ -99,7 +99,8 @@ static void RemoveDeadConstant(Constant *C) { GV->eraseFromParent(); } else if (!isa(C)) - C->destroyConstant(); + if (isa(C->getType())) + C->destroyConstant(); // If the constant referenced anything, see if we can delete it as well. for (SmallPtrSet::iterator OI = Operands.begin(), @@ -245,11 +246,18 @@ bool StripDebugInfo(Module &M) { if (Declare) { while (!Declare->use_empty()) { CallInst *CI = cast(Declare->use_back()); - Value *Arg = CI->getOperand(2); + Value *Arg1 = CI->getOperand(1); + Value *Arg2 = CI->getOperand(2); assert(CI->use_empty() && "llvm.dbg intrinsic should have void result"); CI->eraseFromParent(); - if (Arg->use_empty()) - if (Constant *C = dyn_cast(Arg)) + if (Arg1->use_empty()) { + if (Constant *C = dyn_cast(Arg1)) + DeadConstants.push_back(C); + if (Instruction *I = dyn_cast(Arg1)) + I->eraseFromParent(); + } + if (Arg2->use_empty()) + if (Constant *C = dyn_cast(Arg2)) DeadConstants.push_back(C); } Declare->eraseFromParent();