diff options
author | Anton Yartsev <anton.yartsev@gmail.com> | 2014-02-28 22:29:48 +0000 |
---|---|---|
committer | Anton Yartsev <anton.yartsev@gmail.com> | 2014-02-28 22:29:48 +0000 |
commit | 68a172ca1626ce380395b47b0c1ca76031a0d8bd (patch) | |
tree | 9de16d0d117849073a3d19d4adb131796861d731 /clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp | |
parent | 866e91c9d44428b41089932506ab985a571ca0e1 (diff) | |
download | bcm5719-llvm-68a172ca1626ce380395b47b0c1ca76031a0d8bd.tar.gz bcm5719-llvm-68a172ca1626ce380395b47b0c1ca76031a0d8bd.zip |
[analyzer] Fix for PR18394.
Additional conditions that prevent useful nodes before call from being reclaimed.
llvm-svn: 202553
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp b/clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp index e9c4a35de6e..7812c96f869 100644 --- a/clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp @@ -90,8 +90,9 @@ bool ExplodedGraph::shouldCollect(const ExplodedNode *node) { // (7) The LocationContext is the same as the predecessor. // (8) Expressions that are *not* lvalue expressions. // (9) The PostStmt isn't for a non-consumed Stmt or Expr. - // (10) The successor is not a CallExpr StmtPoint (so that we would - // be able to find it when retrying a call with no inlining). + // (10) The successor is neither a CallExpr StmtPoint nor a CallEnter or + // PreImplicitCall (so that we would be able to find it when retrying a + // call with no inlining). // FIXME: It may be safe to reclaim PreCall and PostCall nodes as well. // Conditions 1 and 2. @@ -153,6 +154,10 @@ bool ExplodedGraph::shouldCollect(const ExplodedNode *node) { if (CallEvent::isCallStmt(SP->getStmt())) return false; + // Condition 10, continuation. + if (SuccLoc.getAs<CallEnter>() || SuccLoc.getAs<PreImplicitCall>()) + return false; + return true; } |