aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-02-12 21:51:20 +0000
committerTed Kremenek <kremenek@apple.com>2008-02-12 21:51:20 +0000
commitf81086940024c8fd1c6497800386e88fd313a3d3 (patch)
tree9dd09881f27c9d256e8cc7e049ddf10648074330
parentd254f00fcc5572f27aab0128330273bbfa668314 (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.cpp43
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,