diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2011-08-24 18:07:01 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2011-08-24 18:07:01 +0000 |
commit | d3e65e702f45ea3476f3bda2b8f69a3e3729e9e2 (patch) | |
tree | d488914c0fd772a927afdf00ca279034e18360e9 /llvm/lib/Transforms/Utils/BasicBlockUtils.cpp | |
parent | a281f2d07dc73ee65594b7c214d18ec277ebc236 (diff) | |
download | bcm5719-llvm-d3e65e702f45ea3476f3bda2b8f69a3e3729e9e2.tar.gz bcm5719-llvm-d3e65e702f45ea3476f3bda2b8f69a3e3729e9e2.zip |
Fix a crashing bug in SplitBlock when it is called on a block with no
dominator information even though dominators were previously computed.
Patch by Nick Sumner.
llvm-svn: 138449
Diffstat (limited to 'llvm/lib/Transforms/Utils/BasicBlockUtils.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/BasicBlockUtils.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp index 27120eeeb3a..a7f9efd562e 100644 --- a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp +++ b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp @@ -299,16 +299,17 @@ BasicBlock *llvm::SplitBlock(BasicBlock *Old, Instruction *SplitPt, Pass *P) { if (DominatorTree *DT = P->getAnalysisIfAvailable<DominatorTree>()) { // Old dominates New. New node dominates all other nodes dominated by Old. - DomTreeNode *OldNode = DT->getNode(Old); - std::vector<DomTreeNode *> Children; - for (DomTreeNode::iterator I = OldNode->begin(), E = OldNode->end(); - I != E; ++I) - Children.push_back(*I); + if (DomTreeNode *OldNode = DT->getNode(Old)) { + std::vector<DomTreeNode *> Children; + for (DomTreeNode::iterator I = OldNode->begin(), E = OldNode->end(); + I != E; ++I) + Children.push_back(*I); DomTreeNode *NewNode = DT->addNewBlock(New,Old); for (std::vector<DomTreeNode *>::iterator I = Children.begin(), E = Children.end(); I != E; ++I) DT->changeImmediateDominator(*I, NewNode); + } } return New; |