summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Yartsev <anton.yartsev@gmail.com>2012-12-14 19:48:34 +0000
committerAnton Yartsev <anton.yartsev@gmail.com>2012-12-14 19:48:34 +0000
commit5363bf157fa61cb2b95d10a97286a49aed37a9db (patch)
tree19949792112bdcc2a710b07f12cd90bbd326fdcf
parent53e3d6d7f00ce2efbd46e36685d011234f2efcb9 (diff)
downloadbcm5719-llvm-5363bf157fa61cb2b95d10a97286a49aed37a9db.tar.gz
bcm5719-llvm-5363bf157fa61cb2b95d10a97286a49aed37a9db.zip
added post-statement callback to CXXNewExpr and pre-statement callback to CXXDeleteExpr
llvm-svn: 170234
-rw-r--r--clang/lib/StaticAnalyzer/Core/ExprEngine.cpp37
1 files changed, 22 insertions, 15 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
index 5c91dd288fa..0f5fad1ac51 100644
--- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
+++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
@@ -780,21 +780,28 @@ void ExprEngine::Visit(const Stmt *S, ExplodedNode *Pred,
break;
}
- case Stmt::CXXNewExprClass: {
- Bldr.takeNodes(Pred);
- const CXXNewExpr *NE = cast<CXXNewExpr>(S);
- VisitCXXNewExpr(NE, Pred, Dst);
- Bldr.addNodes(Dst);
- break;
- }
-
- case Stmt::CXXDeleteExprClass: {
- Bldr.takeNodes(Pred);
- const CXXDeleteExpr *CDE = cast<CXXDeleteExpr>(S);
- VisitCXXDeleteExpr(CDE, Pred, Dst);
- Bldr.addNodes(Dst);
- break;
- }
+ case Stmt::CXXNewExprClass: {
+ Bldr.takeNodes(Pred);
+ ExplodedNodeSet PostVisit;
+ VisitCXXNewExpr(cast<CXXNewExpr>(S), Pred, PostVisit);
+ getCheckerManager().runCheckersForPostStmt(Dst, PostVisit, S, *this);
+ Bldr.addNodes(Dst);
+ break;
+ }
+
+ case Stmt::CXXDeleteExprClass: {
+ Bldr.takeNodes(Pred);
+ ExplodedNodeSet PreVisit;
+ const CXXDeleteExpr *CDE = cast<CXXDeleteExpr>(S);
+ getCheckerManager().runCheckersForPreStmt(PreVisit, Pred, S, *this);
+
+ for (ExplodedNodeSet::iterator i = PreVisit.begin(),
+ e = PreVisit.end(); i != e ; ++i)
+ VisitCXXDeleteExpr(CDE, *i, Dst);
+
+ Bldr.addNodes(Dst);
+ break;
+ }
// FIXME: ChooseExpr is really a constant. We need to fix
// the CFG do not model them as explicit control-flow.
OpenPOWER on IntegriCloud