From 1bb3a402574557cb228f8a96030776c229e282e5 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 12 Jul 2006 18:37:18 +0000 Subject: [PATCH] In addition to deleting calls, the inliner can constant fold them as well. Handle this case, which doesn't require a new callgraph edge. This fixes a crash compiling MallocBench/gs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29121 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Utils/InlineFunction.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/Transforms/Utils/InlineFunction.cpp b/lib/Transforms/Utils/InlineFunction.cpp index 277b10a767f..eeb69116ed5 100644 --- a/lib/Transforms/Utils/InlineFunction.cpp +++ b/lib/Transforms/Utils/InlineFunction.cpp @@ -158,8 +158,10 @@ static void UpdateCallGraphAfterInlining(const Function *Caller, std::map::iterator VMI = ValueMap.find(OrigCall); if (VMI != ValueMap.end()) { // Only copy the edge if the call was inlined! - Instruction *NewCall = cast(VMI->second); - CallerNode->addCalledFunction(CallSite::get(NewCall), I->second); + // If the call was inlined, but then constant folded, there is no edge to + // add. Check for this case. + if (Instruction *NewCall = dyn_cast(VMI->second)) + CallerNode->addCalledFunction(CallSite::get(NewCall), I->second); } } } -- 2.34.1