From: Ted Kremenek Date: Mon, 24 Nov 2008 20:50:24 +0000 (+0000) Subject: Fix CFG bug where the 'increment' block for a 'for' statement would not be X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d0172439194b28bae62a94a0a25d58e6d21e7a14;p=clang 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 --- 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.