diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-02-12 21:51:20 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-02-12 21:51:20 +0000 |
commit | f81086940024c8fd1c6497800386e88fd313a3d3 (patch) | |
tree | 9dd09881f27c9d256e8cc7e049ddf10648074330 | |
parent | d254f00fcc5572f27aab0128330273bbfa668314 (diff) |
Added GREngine support for GotoStmt.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47034 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | Analysis/GREngine.cpp | 43 |
1 files changed, 24 insertions, 19 deletions
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<BinaryOperator>(Term)->getLHS(), Term, B, Pred); + return; case Stmt::ConditionalOperatorClass: HandleBranch(cast<ConditionalOperator>(Term)->getCond(), Term, B, Pred); - break; + return; + + // FIXME: Use constant-folding in CFG construction to simplify this + // case. case Stmt::ChooseExprClass: HandleBranch(cast<ChooseExpr>(Term)->getCond(), Term, B, Pred); - break; + return; - case Stmt::BinaryOperatorClass: // '&&' and '||' - HandleBranch(cast<BinaryOperator>(Term)->getLHS(), Term, B, Pred); - break; - - case Stmt::IfStmtClass: - HandleBranch(cast<IfStmt>(Term)->getCond(), Term, B, Pred); - break; + case Stmt::DoStmtClass: + HandleBranch(cast<DoStmt>(Term)->getCond(), Term, B, Pred); + return; case Stmt::ForStmtClass: HandleBranch(cast<ForStmt>(Term)->getCond(), Term, B, Pred); + return; + + case Stmt::GotoStmtClass: break; + case Stmt::IfStmtClass: + HandleBranch(cast<IfStmt>(Term)->getCond(), Term, B, Pred); + return; + case Stmt::WhileStmtClass: HandleBranch(cast<WhileStmt>(Term)->getCond(), Term, B, Pred); - break; - - case Stmt::DoStmtClass: - HandleBranch(cast<DoStmt>(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, |