[cfe-commits] r113149 - /cfe/trunk/lib/Analysis/CFG.cpp
Ted Kremenek
kremenek at apple.com
Mon Sep 6 10:21:52 PDT 2010
Thanks for doing this. In past FinishBlock reversed the statements in a CFGBlock, but that isn't needed anymore since the iterators take care of it.
On Sep 6, 2010, at 12:32 AM, Zhongxing Xu wrote:
> Author: zhongxingxu
> Date: Mon Sep 6 02:32:31 2010
> New Revision: 113149
>
> URL: http://llvm.org/viewvc/llvm-project?rev=113149&view=rev
> Log:
> FinishBlock() is essentially doing nothing except returning '!badCFG'.
>
> Modified:
> cfe/trunk/lib/Analysis/CFG.cpp
>
> Modified: cfe/trunk/lib/Analysis/CFG.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CFG.cpp?rev=113149&r1=113148&r2=113149&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Analysis/CFG.cpp (original)
> +++ cfe/trunk/lib/Analysis/CFG.cpp Mon Sep 6 02:32:31 2010
> @@ -171,7 +171,7 @@
>
> void autoCreateBlock() { if (!Block) Block = createBlock(); }
> CFGBlock *createBlock(bool add_successor = true);
> - bool FinishBlock(CFGBlock* B);
> +
> CFGBlock *addStmt(Stmt *S) {
> return Visit(S, AddStmtChoice::AlwaysAdd);
> }
> @@ -331,15 +331,6 @@
> return B;
> }
>
> -/// FinishBlock - "Finalize" the block by checking if we have a bad CFG.
> -bool CFGBuilder::FinishBlock(CFGBlock* B) {
> - if (badCFG)
> - return false;
> -
> - assert(B);
> - return true;
> -}
> -
> /// Visit - Walk the subtree of a statement and add extra
> /// blocks for ternary operators, &&, and ||. We also process "," and
> /// DeclStmts (which may contain nested control-flow).
> @@ -505,7 +496,7 @@
> CFGBlock* ConfluenceBlock = Block ? Block : createBlock();
> AppendStmt(ConfluenceBlock, B, asc);
>
> - if (!FinishBlock(ConfluenceBlock))
> + if (badCFG)
> return 0;
>
> // create the block evaluating the LHS
> @@ -518,7 +509,7 @@
> CFGBlock* RHSBlock = addStmt(B->getRHS());
>
> if (RHSBlock) {
> - if (!FinishBlock(RHSBlock))
> + if (badCFG)
> return 0;
> }
> else {
> @@ -576,8 +567,8 @@
> CFGBlock *CFGBuilder::VisitBreakStmt(BreakStmt *B) {
> // "break" is a control-flow statement. Thus we stop processing the current
> // block.
> - if (Block && !FinishBlock(Block))
> - return 0;
> + if (badCFG)
> + return 0;
>
> // Now create a new block that ends with the break statement.
> Block = createBlock(false);
> @@ -644,7 +635,7 @@
>
> if (Block) {
> Succ = Block;
> - if (!FinishBlock(Block))
> + if (badCFG)
> return 0;
> }
>
> @@ -670,7 +661,7 @@
> AddStmtChoice asc) {
> CFGBlock* ConfluenceBlock = Block ? Block : createBlock();
> AppendStmt(ConfluenceBlock, C, asc);
> - if (!FinishBlock(ConfluenceBlock))
> + if (badCFG)
> return 0;
>
> asc = asc.asLValue() ? AddStmtChoice::AlwaysAddAsLValue
> @@ -679,13 +670,13 @@
> Succ = ConfluenceBlock;
> Block = NULL;
> CFGBlock* LHSBlock = Visit(C->getLHS(), asc);
> - if (!FinishBlock(LHSBlock))
> + if (badCFG)
> return 0;
>
> Succ = ConfluenceBlock;
> Block = NULL;
> CFGBlock* RHSBlock = Visit(C->getRHS(), asc);
> - if (!FinishBlock(RHSBlock))
> + if (badCFG)
> return 0;
>
> Block = createBlock(false);
> @@ -725,7 +716,7 @@
> // expression.
> CFGBlock* ConfluenceBlock = Block ? Block : createBlock();
> AppendStmt(ConfluenceBlock, C, asc);
> - if (!FinishBlock(ConfluenceBlock))
> + if (badCFG)
> return 0;
>
> asc = asc.asLValue() ? AddStmtChoice::AlwaysAddAsLValue
> @@ -740,7 +731,7 @@
> CFGBlock* LHSBlock = NULL;
> if (C->getLHS()) {
> LHSBlock = Visit(C->getLHS(), asc);
> - if (!FinishBlock(LHSBlock))
> + if (badCFG)
> return 0;
> Block = NULL;
> }
> @@ -748,7 +739,7 @@
> // Create the block for the RHS expression.
> Succ = ConfluenceBlock;
> CFGBlock* RHSBlock = Visit(C->getRHS(), asc);
> - if (!FinishBlock(RHSBlock))
> + if (badCFG)
> return 0;
>
> // Create the block that will contain the condition.
> @@ -857,7 +848,7 @@
> // block.
> if (Block) {
> Succ = Block;
> - if (!FinishBlock(Block))
> + if (badCFG)
> return 0;
> }
>
> @@ -875,7 +866,7 @@
> if (!ElseBlock) // Can occur when the Else body has all NullStmts.
> ElseBlock = sv.get();
> else if (Block) {
> - if (!FinishBlock(ElseBlock))
> + if (badCFG)
> return 0;
> }
> }
> @@ -896,7 +887,7 @@
> ThenBlock = createBlock(false);
> AddSuccessor(ThenBlock, sv.get());
> } else if (Block) {
> - if (!FinishBlock(ThenBlock))
> + if (badCFG)
> return 0;
> }
> }
> @@ -940,8 +931,6 @@
> // code afterwards is DEAD (unreachable). We still keep a basic block
> // for that code; a simple "mark-and-sweep" from the entry block will be
> // able to report such dead blocks.
> - if (Block)
> - FinishBlock(Block);
>
> // Create the new block.
> Block = createBlock(false);
> @@ -970,7 +959,7 @@
> // already processed the substatement) there is no extra control-flow to worry
> // about.
> LabelBlock->setLabel(L);
> - if (!FinishBlock(LabelBlock))
> + if (badCFG)
> return 0;
>
> // We set Block to NULL to allow lazy creation of a new block (if necessary);
> @@ -985,8 +974,6 @@
> CFGBlock* CFGBuilder::VisitGotoStmt(GotoStmt* G) {
> // Goto is a control-flow statement. Thus we stop processing the current
> // block and create a new one.
> - if (Block)
> - FinishBlock(Block);
>
> Block = createBlock(false);
> Block->setTerminator(G);
> @@ -1009,7 +996,7 @@
> // "for" is a control-flow statement. Thus we stop processing the current
> // block.
> if (Block) {
> - if (!FinishBlock(Block))
> + if (badCFG)
> return 0;
> LoopSuccessor = Block;
> } else
> @@ -1048,7 +1035,7 @@
> }
>
> if (Block) {
> - if (!FinishBlock(EntryConditionBlock))
> + if (badCFG)
> return 0;
> }
> }
> @@ -1088,7 +1075,7 @@
> // Finish up the increment (or empty) block if it hasn't been already.
> if (Block) {
> assert(Block == Succ);
> - if (!FinishBlock(Block))
> + if (badCFG)
> return 0;
> Block = 0;
> }
> @@ -1105,7 +1092,7 @@
>
> if (!BodyBlock)
> BodyBlock = ContinueTargetBlock; // can happen for "for (...;...;...) ;"
> - else if (Block && !FinishBlock(BodyBlock))
> + else if (badCFG)
> return 0;
>
> // This new body block is a successor to our "exit" condition block.
> @@ -1176,7 +1163,7 @@
> CFGBlock* LoopSuccessor = 0;
>
> if (Block) {
> - if (!FinishBlock(Block))
> + if (badCFG)
> return 0;
> LoopSuccessor = Block;
> Block = 0;
> @@ -1201,7 +1188,7 @@
> // the CFG unless it contains control-flow.
> EntryConditionBlock = Visit(S->getElement(), AddStmtChoice::NotAlwaysAdd);
> if (Block) {
> - if (!FinishBlock(EntryConditionBlock))
> + if (badCFG)
> return 0;
> Block = 0;
> }
> @@ -1224,7 +1211,7 @@
> if (!BodyBlock)
> BodyBlock = EntryConditionBlock; // can happen for "for (X in Y) ;"
> else if (Block) {
> - if (!FinishBlock(BodyBlock))
> + if (badCFG)
> return 0;
> }
>
> @@ -1250,7 +1237,7 @@
> // The sync body starts its own basic block. This makes it a little easier
> // for diagnostic clients.
> if (SyncBlock) {
> - if (!FinishBlock(SyncBlock))
> + if (badCFG)
> return 0;
>
> Block = 0;
> @@ -1272,7 +1259,7 @@
> // "while" is a control-flow statement. Thus we stop processing the current
> // block.
> if (Block) {
> - if (!FinishBlock(Block))
> + if (badCFG)
> return 0;
> LoopSuccessor = Block;
> } else
> @@ -1307,7 +1294,7 @@
> }
>
> if (Block) {
> - if (!FinishBlock(EntryConditionBlock))
> + if (badCFG)
> return 0;
> }
> }
> @@ -1348,7 +1335,7 @@
> if (!BodyBlock)
> BodyBlock = ContinueTargetBlock; // can happen for "while(...) ;"
> else if (Block) {
> - if (!FinishBlock(BodyBlock))
> + if (badCFG)
> return 0;
> }
>
> @@ -1381,7 +1368,7 @@
> // statement.
>
> // If we were in the middle of a block we stop processing that block.
> - if (Block && !FinishBlock(Block))
> + if (badCFG)
> return 0;
>
> // Create the new block.
> @@ -1397,7 +1384,7 @@
>
> CFGBlock* CFGBuilder::VisitCXXThrowExpr(CXXThrowExpr* T) {
> // If we were in the middle of a block we stop processing that block.
> - if (Block && !FinishBlock(Block))
> + if (badCFG)
> return 0;
>
> // Create the new block.
> @@ -1421,7 +1408,7 @@
> // "do...while" is a control-flow statement. Thus we stop processing the
> // current block.
> if (Block) {
> - if (!FinishBlock(Block))
> + if (badCFG)
> return 0;
> LoopSuccessor = Block;
> } else
> @@ -1442,7 +1429,7 @@
> Block = ExitConditionBlock;
> EntryConditionBlock = addStmt(C);
> if (Block) {
> - if (!FinishBlock(EntryConditionBlock))
> + if (badCFG)
> return 0;
> }
> }
> @@ -1478,7 +1465,7 @@
> if (!BodyBlock)
> BodyBlock = EntryConditionBlock; // can happen for "do ; while(...)"
> else if (Block) {
> - if (!FinishBlock(BodyBlock))
> + if (badCFG)
> return 0;
> }
>
> @@ -1516,8 +1503,8 @@
> CFGBlock* CFGBuilder::VisitContinueStmt(ContinueStmt* C) {
> // "continue" is a control-flow statement. Thus we stop processing the
> // current block.
> - if (Block && !FinishBlock(Block))
> - return 0;
> + if (badCFG)
> + return 0;
>
> // Now create a new block that ends with the continue statement.
> Block = createBlock(false);
> @@ -1567,7 +1554,7 @@
> CFGBlock* SwitchSuccessor = NULL;
>
> if (Block) {
> - if (!FinishBlock(Block))
> + if (badCFG)
> return 0;
> SwitchSuccessor = Block;
> } else SwitchSuccessor = Succ;
> @@ -1595,9 +1582,9 @@
> // control-flow from the switch goes to case/default statements.
> assert(Terminator->getBody() && "switch must contain a non-NULL body");
> Block = NULL;
> - CFGBlock *BodyBlock = addStmt(Terminator->getBody());
> + addStmt(Terminator->getBody());
> if (Block) {
> - if (!FinishBlock(BodyBlock))
> + if (badCFG)
> return 0;
> }
>
> @@ -1660,7 +1647,7 @@
> // were processing (the "case XXX:" is the label).
> CaseBlock->setLabel(CS);
>
> - if (!FinishBlock(CaseBlock))
> + if (badCFG)
> return 0;
>
> // Add this block to the list of successors for the block with the switch
> @@ -1696,7 +1683,7 @@
> // we were processing (the "default:" is the label).
> DefaultCaseBlock->setLabel(Terminator);
>
> - if (!FinishBlock(DefaultCaseBlock))
> + if (badCFG)
> return 0;
>
> // Unlike case statements, we don't add the default block to the successors
> @@ -1720,7 +1707,7 @@
> CFGBlock* TrySuccessor = NULL;
>
> if (Block) {
> - if (!FinishBlock(Block))
> + if (badCFG)
> return 0;
> TrySuccessor = Block;
> } else TrySuccessor = Succ;
> @@ -1781,7 +1768,7 @@
>
> CatchBlock->setLabel(CS);
>
> - if (!FinishBlock(CatchBlock))
> + if (badCFG)
> return 0;
>
> // We set Block to NULL to allow lazy creation of a new block (if necessary)
> @@ -1810,7 +1797,7 @@
>
> // IndirectGoto is a control-flow statement. Thus we stop processing the
> // current block and create a new one.
> - if (Block && !FinishBlock(Block))
> + if (badCFG)
> return 0;
>
> Block = createBlock(false);
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list