diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-11-24 20:50:24 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-11-24 20:50:24 +0000 |
commit | d0172439194b28bae62a94a0a25d58e6d21e7a14 (patch) | |
tree | 1be5165077b6e16e76487a6d0a1327a0fe4ac7cd /lib/AST/CFG.cpp | |
parent | d14094db3375b64fbe3cbf43587bcb0f1f728220 (diff) |
Fix CFG bug where the 'increment' block for a 'for' statement would not be
properly reversed once constructed.
This fixes PR 3125:
http://llvm.org/bugs/show_bug.cgi?id=3125
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59982 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/CFG.cpp')
-rw-r--r-- | lib/AST/CFG.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/AST/CFG.cpp b/lib/AST/CFG.cpp index f8c3c26bb1..82336a44e0 100644 --- a/lib/AST/CFG.cpp +++ b/lib/AST/CFG.cpp @@ -745,8 +745,15 @@ CFGBlock* CFGBuilder::VisitForStmt(ForStmt* F) { if (Stmt* I = F->getInc()) { // Generate increment code in its own basic block. This is the target // of continue statements. - Succ = addStmt(I); - Block = 0; + Succ = Visit(I); + + // Finish up the increment block if it hasn't been already. + if (Block) { + assert (Block == Succ); + FinishBlock(Block); + Block = 0; + } + ContinueTargetBlock = Succ; } else { @@ -1621,6 +1628,7 @@ void CFG::print(llvm::raw_ostream& OS) const { // Print the exit block. print_block(OS, this, getExit(), &Helper, true); + OS.flush(); } /// dump - A simply pretty printer of a CFGBlock that outputs to stderr. |