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); } } }