diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-04-03 04:59:14 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-04-03 04:59:14 +0000 |
commit | 94826a7910484a6c7e191e7c8a5604fffd864b4d (patch) | |
tree | 006e64d46698932e3e81972a3d9aac2a6b9411f0 /lib/Analysis/BugReporter.cpp | |
parent | 7ebde953bb050caa69f791fc1de449d435c6a36f (diff) |
When creating PathDiagnostics, created a trimmed graph first and report the
BFS path to the root. This also avoids problems with loops in the ExplodedGraph.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49133 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/BugReporter.cpp')
-rw-r--r-- | lib/Analysis/BugReporter.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/lib/Analysis/BugReporter.cpp b/lib/Analysis/BugReporter.cpp index 2ae0960206..db979fafdb 100644 --- a/lib/Analysis/BugReporter.cpp +++ b/lib/Analysis/BugReporter.cpp @@ -69,8 +69,26 @@ void BugReporter::GeneratePathDiagnostic(PathDiagnostic& PD, ASTContext& Ctx, SourceManager& SMgr = Ctx.getSourceManager(); - llvm::OwningPtr<ExplodedGraph<GRExprEngine> > GTrim(G.Trim(&N, &N+1)); + + // Find the sink in the trimmed graph. + // FIXME: Should we eventually have a sink iterator? + + ExplodedNode<ValueState>* NewN = 0; + + for (ExplodedGraph<GRExprEngine>::node_iterator + I = GTrim->nodes_begin(), E = GTrim->nodes_end(); I != E; ++I) { + + if (I->isSink()) { + NewN = &*I; + break; + } + } + + assert (NewN); + assert (NewN->getLocation() == N->getLocation()); + + N = NewN; while (!N->pred_empty()) { |