]> granicus.if.org Git - clang/commitdiff
Remove a recursive visitiation in ExprEngine that is no longer needed
authorErik Verbruggen <erikjv@me.com>
Wed, 29 Feb 2012 08:42:57 +0000 (08:42 +0000)
committerErik Verbruggen <erikjv@me.com>
Wed, 29 Feb 2012 08:42:57 +0000 (08:42 +0000)
because the CFG is fully linearized.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151711 91177308-0d34-0410-b5e6-96231b3b80d8

lib/StaticAnalyzer/Core/ExprEngineCXX.cpp
test/Analysis/nullptr.cpp

index 45f8cee9100befcb14e1b5609347c480953378be..fa0245145cbbb9ed58bed29c9ce6d990b29b5147 100644 (file)
@@ -335,15 +335,9 @@ void ExprEngine::VisitCXXNewExpr(const CXXNewExpr *CNE, ExplodedNode *Pred,
 
 void ExprEngine::VisitCXXDeleteExpr(const CXXDeleteExpr *CDE, 
                                     ExplodedNode *Pred, ExplodedNodeSet &Dst) {
-  // Should do more checking.
-  ExplodedNodeSet Argevaluated;
-  Visit(CDE->getArgument(), Pred, Argevaluated);
-  StmtNodeBuilder Bldr(Argevaluated, Dst, *currentBuilderContext);
-  for (ExplodedNodeSet::iterator I = Argevaluated.begin(), 
-                                 E = Argevaluated.end(); I != E; ++I) {
-    ProgramStateRef state = (*I)->getState();
-    Bldr.generateNode(CDE, *I, state);
-  }
+  StmtNodeBuilder Bldr(Pred, Dst, *currentBuilderContext);
+  ProgramStateRef state = Pred->getState();
+  Bldr.generateNode(CDE, Pred, state);
 }
 
 void ExprEngine::VisitCXXThisExpr(const CXXThisExpr *TE, ExplodedNode *Pred,
index fc7e7ef482b81105c7b08be6fd1a85fdbd6366f9..89b4173bc56eb02fefe1a0c1a18add3c65fa3491 100644 (file)
@@ -39,7 +39,6 @@ void foo4(void) {
     *np = 0;  // no-warning
 }
 
-
 int pr10372(void *& x) {
   // GNU null is a pointer-sized integer, not a pointer.
   x = __null;
@@ -47,3 +46,7 @@ int pr10372(void *& x) {
   return __null;
 }
 
+void zoo1() {
+  char **p = 0;
+  delete *(p + 0); // expected-warning{{Dereference of null pointer}}
+}