aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-08-31 17:03:41 +0000
committerTed Kremenek <kremenek@apple.com>2007-08-31 17:03:41 +0000
commit49a436de368c18c3fc669037aa5211b973b076a9 (patch)
treea6011cdeb9d07c1de578d866f9880c90507afe89
parentd0f97d1716a138a8d9e0df8e5af77334663723d8 (diff)
Added support for __builtin_choose_expr (ChooseExpr) in CFGs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41646 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--AST/CFG.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/AST/CFG.cpp b/AST/CFG.cpp
index 2c9336e381..89d7af9965 100644
--- a/AST/CFG.cpp
+++ b/AST/CFG.cpp
@@ -243,6 +243,28 @@ CFGBlock* CFGBuilder::WalkAST(Stmt* S, bool AlwaysAddStmt = false) {
Block->setTerminator(C);
return addStmt(C->getCond());
}
+
+ case Stmt::ChooseExprClass: {
+ ChooseExpr* C = cast<ChooseExpr>(S);
+
+ CFGBlock* ConfluenceBlock = (Block) ? Block : createBlock();
+ ConfluenceBlock->appendStmt(C);
+ FinishBlock(ConfluenceBlock);
+
+ Succ = ConfluenceBlock;
+ Block = NULL;
+ CFGBlock* LHSBlock = Visit(C->getLHS());
+
+ Succ = ConfluenceBlock;
+ Block = NULL;
+ CFGBlock* RHSBlock = Visit(C->getRHS());
+
+ Block = createBlock(false);
+ Block->addSuccessor(LHSBlock);
+ Block->addSuccessor(RHSBlock);
+ Block->setTerminator(C);
+ return addStmt(C->getCond());
+ }
case Stmt::DeclStmtClass:
if (VarDecl* V = dyn_cast<VarDecl>(cast<DeclStmt>(S)->getDecl())) {