From: Ted Kremenek Date: Tue, 12 Feb 2008 21:51:20 +0000 (+0000) Subject: Added GREngine support for GotoStmt. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f81086940024c8fd1c6497800386e88fd313a3d3;p=clang Added GREngine support for GotoStmt. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47034 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Analysis/GREngine.cpp b/Analysis/GREngine.cpp index 9858f24784..e7720d97a3 100644 --- a/Analysis/GREngine.cpp +++ b/Analysis/GREngine.cpp @@ -168,42 +168,47 @@ void GREngineImpl::HandleBlockExit(CFGBlock * B, ExplodedNodeImpl* Pred) { default: assert(false && "Analysis for this terminator not implemented."); break; + + case Stmt::BinaryOperatorClass: // '&&' and '||' + HandleBranch(cast(Term)->getLHS(), Term, B, Pred); + return; case Stmt::ConditionalOperatorClass: HandleBranch(cast(Term)->getCond(), Term, B, Pred); - break; + return; + + // FIXME: Use constant-folding in CFG construction to simplify this + // case. case Stmt::ChooseExprClass: HandleBranch(cast(Term)->getCond(), Term, B, Pred); - break; + return; - case Stmt::BinaryOperatorClass: // '&&' and '||' - HandleBranch(cast(Term)->getLHS(), Term, B, Pred); - break; - - case Stmt::IfStmtClass: - HandleBranch(cast(Term)->getCond(), Term, B, Pred); - break; + case Stmt::DoStmtClass: + HandleBranch(cast(Term)->getCond(), Term, B, Pred); + return; case Stmt::ForStmtClass: HandleBranch(cast(Term)->getCond(), Term, B, Pred); + return; + + case Stmt::GotoStmtClass: break; + case Stmt::IfStmtClass: + HandleBranch(cast(Term)->getCond(), Term, B, Pred); + return; + case Stmt::WhileStmtClass: HandleBranch(cast(Term)->getCond(), Term, B, Pred); - break; - - case Stmt::DoStmtClass: - HandleBranch(cast(Term)->getCond(), Term, B, Pred); - break; + return; } } - else { - assert (B->succ_size() == 1 && - "Blocks with no terminator should have at most 1 successor."); + + assert (B->succ_size() == 1 && + "Blocks with no terminator should have at most 1 successor."); - GenerateNode(BlockEdge(getCFG(),B,*(B->succ_begin())), Pred->State, Pred); - } + GenerateNode(BlockEdge(getCFG(),B,*(B->succ_begin())), Pred->State, Pred); } void GREngineImpl::HandleBranch(Expr* Cond, Stmt* Term, CFGBlock * B,