diff options
author | Anton Yartsev <anton.yartsev@gmail.com> | 2012-12-14 19:48:34 +0000 |
---|---|---|
committer | Anton Yartsev <anton.yartsev@gmail.com> | 2012-12-14 19:48:34 +0000 |
commit | 2bfa166a26edb6f26915abe38caa551dbb05ad19 (patch) | |
tree | e4bdf99f6f92377115dcc47a17fb2f8e303ede6f /lib/StaticAnalyzer/Core/ExprEngine.cpp | |
parent | 4ae711b5ef292378d5b88cede3d4b708174053e2 (diff) |
added post-statement callback to CXXNewExpr and pre-statement callback to CXXDeleteExpr
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170234 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Core/ExprEngine.cpp')
-rw-r--r-- | lib/StaticAnalyzer/Core/ExprEngine.cpp | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/lib/StaticAnalyzer/Core/ExprEngine.cpp b/lib/StaticAnalyzer/Core/ExprEngine.cpp index 5c91dd288f..0f5fad1ac5 100644 --- a/lib/StaticAnalyzer/Core/ExprEngine.cpp +++ b/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. |