Index: lib/CodeGen/CFIInstrInserter.cpp =================================================================== --- lib/CodeGen/CFIInstrInserter.cpp +++ lib/CodeGen/CFIInstrInserter.cpp @@ -222,13 +222,19 @@ } void CFIInstrInserter::updateSuccCFAInfo(MBBCFAInfo &MBBInfo) { - for (MachineBasicBlock *Succ : MBBInfo.MBB->successors()) { + SmallVector Stack(MBBInfo.MBB->successors().begin(), + MBBInfo.MBB->successors().end()); + + while (!Stack.empty()) { + MachineBasicBlock *Succ = Stack.pop_back_val(); MBBCFAInfo &SuccInfo = MBBVector[Succ->getNumber()]; - if (SuccInfo.Processed) continue; + if (SuccInfo.Processed) + continue; + SuccInfo.IncomingCFAOffset = MBBInfo.OutgoingCFAOffset; SuccInfo.IncomingCFARegister = MBBInfo.OutgoingCFARegister; calculateOutgoingCFAInfo(SuccInfo); - updateSuccCFAInfo(SuccInfo); + llvm::copy(SuccInfo.MBB->successors(), std::back_inserter(Stack)); } }