diff options
Diffstat (limited to 'llvm/lib/IR/BasicBlock.cpp')
-rw-r--r-- | llvm/lib/IR/BasicBlock.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/IR/BasicBlock.cpp b/llvm/lib/IR/BasicBlock.cpp index 687865d..20101a9 100644 --- a/llvm/lib/IR/BasicBlock.cpp +++ b/llvm/lib/IR/BasicBlock.cpp @@ -452,7 +452,11 @@ BasicBlock *BasicBlock::splitBasicBlockBefore(iterator I, const Twine &BBName) { // If there were PHI nodes in 'this' block, the PHI nodes are updated // to reflect that the incoming branches will be from the New block and not // from predecessors of the 'this' block. - for (BasicBlock *Pred : predecessors(this)) { + // Save predecessors to separate vector before modifying them. + SmallVector<BasicBlock *, 4> Predecessors; + for (BasicBlock *Pred : predecessors(this)) + Predecessors.push_back(Pred); + for (BasicBlock *Pred : Predecessors) { Instruction *TI = Pred->getTerminator(); TI->replaceSuccessorWith(this, New); this->replacePhiUsesWith(Pred, New); |