diff options
-rw-r--r-- | clang/include/clang/Analysis/Visitors/CFGStmtVisitor.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/clang/include/clang/Analysis/Visitors/CFGStmtVisitor.h b/clang/include/clang/Analysis/Visitors/CFGStmtVisitor.h index 5cc8bc57e0c..5c3b2839449 100644 --- a/clang/include/clang/Analysis/Visitors/CFGStmtVisitor.h +++ b/clang/include/clang/Analysis/Visitors/CFGStmtVisitor.h @@ -118,6 +118,26 @@ public: /// VisitChildren: Call "Visit" on each child of S. void VisitChildren(Stmt* S) { + + switch (S->getStmtClass()) { + default: + break; + + case Stmt::StmtExprClass: { + CompoundStmt* CS = cast<StmtExpr>(S)->getSubStmt(); + if (CS->body_empty()) return; + static_cast<ImplClass*>(this)->Visit(CS->body_back()); + return; + } + + case Stmt::BinaryOperatorClass: { + BinaryOperator* B = cast<BinaryOperator>(S); + if (B->getOpcode() != BinaryOperator::Comma) break; + static_cast<ImplClass*>(this)->Visit(B->getRHS()); + return; + } + } + for (Stmt::child_iterator I=S->child_begin(), E=S->child_end(); I != E;++I) if (*I) static_cast<ImplClass*>(this)->Visit(*I); } |