summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
diff options
context:
space:
mode:
authorAnton Yartsev <anton.yartsev@gmail.com>2014-02-28 22:29:48 +0000
committerAnton Yartsev <anton.yartsev@gmail.com>2014-02-28 22:29:48 +0000
commit68a172ca1626ce380395b47b0c1ca76031a0d8bd (patch)
tree9de16d0d117849073a3d19d4adb131796861d731 /clang/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
parent866e91c9d44428b41089932506ab985a571ca0e1 (diff)
downloadbcm5719-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.cpp9
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;
}
OpenPOWER on IntegriCloud