aboutsummaryrefslogtreecommitdiff
path: root/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-06-01 23:48:44 +0000
committerAnna Zaks <ganna@apple.com>2012-06-01 23:48:44 +0000
commit183ff2aaacbc1995ed64d5e2ffea4456fd871633 (patch)
tree814ddd5e5751b32df6ce41e8dad3c16b552688ed /lib/StaticAnalyzer/Core/ExplodedGraph.cpp
parent144e52be486a3906aec90c51b0ac94a30313152e (diff)
[analyzer] Fix a spurious undef value warning.
When we timeout or exceed a max number of blocks within an inlined function, we retry with no inlining starting from a node right before the CallEnter node. We assume the state of that node is the state of the program before we start evaluating the call. However, the node pruning removes this node as unimportant. Teach the node pruning to keep the predecessors of the call enter nodes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@157860 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Core/ExplodedGraph.cpp')
-rw-r--r--lib/StaticAnalyzer/Core/ExplodedGraph.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/StaticAnalyzer/Core/ExplodedGraph.cpp b/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
index e433c353c1..5b9f451e97 100644
--- a/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
+++ b/lib/StaticAnalyzer/Core/ExplodedGraph.cpp
@@ -67,6 +67,8 @@ bool ExplodedGraph::shouldCollect(const ExplodedNode *node) {
// (6) The 'GDM' is the same as the predecessor.
// (7) The LocationContext is the same as the predecessor.
// (8) The PostStmt is for a non-consumed Stmt or Expr.
+ // (9) The successor is a CallExpr StmtPoint (so that we would be able to
+ // find it when retrying a call with no inlining).
// Conditions 1 and 2.
if (node->pred_size() != 1 || node->succ_size() != 1)
@@ -109,7 +111,13 @@ bool ExplodedGraph::shouldCollect(const ExplodedNode *node) {
return false;
}
- return true;
+ // Condition 9.
+ const ProgramPoint SuccLoc = succ->getLocation();
+ if (const StmtPoint *SP = dyn_cast<StmtPoint>(&SuccLoc))
+ if (isa<CallExpr>(SP->getStmt()))
+ return false;
+
+ return true;
}
void ExplodedGraph::collectNode(ExplodedNode *node) {