diff options
-rw-r--r-- | lib/StaticAnalyzer/Core/ExprEngineCXX.cpp | 12 | ||||
-rw-r--r-- | test/Analysis/nullptr.cpp | 5 |
2 files changed, 7 insertions, 10 deletions
diff --git a/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp b/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp index 45f8cee910..fa0245145c 100644 --- a/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp +++ b/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp @@ -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, diff --git a/test/Analysis/nullptr.cpp b/test/Analysis/nullptr.cpp index fc7e7ef482..89b4173bc5 100644 --- a/test/Analysis/nullptr.cpp +++ b/test/Analysis/nullptr.cpp @@ -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}} +} |