aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/ExplodedGraph.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-03-12 23:41:59 +0000
committerTed Kremenek <kremenek@apple.com>2009-03-12 23:41:59 +0000
commit10aa55410bbecbb658ce14a5f801d50cf06d12df (patch)
tree8340f87dc42d9e0fe54a5842ea6af6ae7898d0f5 /lib/Analysis/ExplodedGraph.cpp
parentbaf534875ed0a55c6342636ff3f4602b8ac22b69 (diff)
Use the correct data structures!
ExplodedGraph::TrimGraph: - Just do a DFS both ways instead of BFS-DFS. We're just determining what subset of the nodes are reachable from the root and reverse-reachable from the bug nodes. DFS is more efficient for this task. BugReporter: - MakeReportGraph: Do a reverse-BFS instead of a reverse-DFS to determine the approximate shortest path through the simulation graph. We were seeing some weird cases where too many loops were being reported for simple bugs. Possibly we will need to replace this with actually computing the shortest path in terms of line numbers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66842 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/ExplodedGraph.cpp')
-rw-r--r--lib/Analysis/ExplodedGraph.cpp8
1 files changed, 3 insertions, 5 deletions
diff --git a/lib/Analysis/ExplodedGraph.cpp b/lib/Analysis/ExplodedGraph.cpp
index 0e72af91e1..20de6c48c3 100644
--- a/lib/Analysis/ExplodedGraph.cpp
+++ b/lib/Analysis/ExplodedGraph.cpp
@@ -18,7 +18,6 @@
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallVector.h"
#include <vector>
-#include <list>
using namespace clang;
@@ -133,10 +132,9 @@ const {
typedef llvm::DenseMap<const ExplodedNodeImpl*, ExplodedNodeImpl*> Pass2Ty;
Pass2Ty& Pass2 = M->M;
- std::list<const ExplodedNodeImpl*> WL1;
- llvm::SmallVector<const ExplodedNodeImpl*, 10> WL2;
+ llvm::SmallVector<const ExplodedNodeImpl*, 10> WL1, WL2;
- // ===- Pass 1 (reverse BFS) -===
+ // ===- Pass 1 (reverse DFS) -===
for (const ExplodedNodeImpl* const* I = BeginSources; I != EndSources; ++I) {
assert(*I);
WL1.push_back(*I);
@@ -163,7 +161,7 @@ const {
// Visit our predecessors and enqueue them.
for (ExplodedNodeImpl** I=N->Preds.begin(), **E=N->Preds.end(); I!=E; ++I)
- WL1.push_front(*I);
+ WL1.push_back(*I);
}
// We didn't hit a root? Return with a null pointer for the new graph.