diff options
author | David Majnemer <david.majnemer@gmail.com> | 2016-10-07 01:38:35 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2016-10-07 01:38:35 +0000 |
commit | 8c03c1bade5b7fcfb3724dc65771ef9dcf8f8072 (patch) | |
tree | 845e5ce8b9ff3b89d9fa68af6f298c7825142b61 /llvm/lib/Transforms/Utils/SimplifyCFG.cpp | |
parent | 16d29e31113b5fd593c66716d81d2da729a8cfec (diff) | |
download | bcm5719-llvm-8c03c1bade5b7fcfb3724dc65771ef9dcf8f8072.tar.gz bcm5719-llvm-8c03c1bade5b7fcfb3724dc65771ef9dcf8f8072.zip |
[SimplifyCFG] Correctly test for unconditional branches in GetCaseResults
GetCaseResults assumed that a terminator with one successor was an
unconditional branch. This is not necessarily the case, it could be a
cleanupret.
Strengthen the check by querying whether or not the terminator is
exceptional.
llvm-svn: 283517
Diffstat (limited to 'llvm/lib/Transforms/Utils/SimplifyCFG.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index 90ce6720182..1546a60c337 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -4503,7 +4503,7 @@ GetCaseResults(SwitchInst *SI, ConstantInt *CaseVal, BasicBlock *CaseDest, ++I) { if (TerminatorInst *T = dyn_cast<TerminatorInst>(I)) { // If the terminator is a simple branch, continue to the next block. - if (T->getNumSuccessors() != 1) + if (T->getNumSuccessors() != 1 || T->isExceptional()) return false; Pred = CaseDest; CaseDest = T->getSuccessor(0); |