From: Ted Kremenek Date: Thu, 3 Apr 2008 04:59:14 +0000 (+0000) Subject: When creating PathDiagnostics, created a trimmed graph first and report the X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=94826a7910484a6c7e191e7c8a5604fffd864b4d;p=clang 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 --- 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 > GTrim(G.Trim(&N, &N+1)); + + // Find the sink in the trimmed graph. + // FIXME: Should we eventually have a sink iterator? + + ExplodedNode* NewN = 0; + + for (ExplodedGraph::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()) {