[cfe-commits] r170234 - /cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp

Anton Yartsev anton.yartsev at gmail.com
Fri Dec 14 11:48:35 PST 2012


Author: ayartsev
Date: Fri Dec 14 13:48:34 2012
New Revision: 170234

URL: http://llvm.org/viewvc/llvm-project?rev=170234&view=rev
Log:
added post-statement callback to CXXNewExpr and pre-statement callback to CXXDeleteExpr

Modified:
    cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp

Modified: cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp?rev=170234&r1=170233&r2=170234&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp Fri Dec 14 13:48:34 2012
@@ -780,21 +780,28 @@
       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.
 





More information about the cfe-commits mailing list