diff options
author | Ted Kremenek <kremenek@apple.com> | 2007-08-31 17:03:41 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2007-08-31 17:03:41 +0000 |
commit | 49a436de368c18c3fc669037aa5211b973b076a9 (patch) | |
tree | a6011cdeb9d07c1de578d866f9880c90507afe89 | |
parent | d0f97d1716a138a8d9e0df8e5af77334663723d8 (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.cpp | 22 |
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())) { |