From 9a9fe4068eed2fc72ec985e5ae393fb79a8fb9ad Mon Sep 17 00:00:00 2001 From: Jordan Rose Date: Sat, 16 Mar 2013 01:07:47 +0000 Subject: [PATCH] [analyzer] Don't repeat a bug equivalence class if every report is invalid. I removed this check in the recursion->iteration commit, but forgot that generatePathDiagnostic may be called multiple times if there are multiple PathDiagnosticConsumers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177214 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/StaticAnalyzer/Core/BugReporter.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/StaticAnalyzer/Core/BugReporter.cpp b/lib/StaticAnalyzer/Core/BugReporter.cpp index 1dca2b5206..46108f44ea 100644 --- a/lib/StaticAnalyzer/Core/BugReporter.cpp +++ b/lib/StaticAnalyzer/Core/BugReporter.cpp @@ -2114,13 +2114,23 @@ bool GRBugReporter::generatePathDiagnostic(PathDiagnostic& PD, ArrayRef &bugReports) { assert(!bugReports.empty()); + bool HasValid = false; SmallVector errorNodes; for (ArrayRef::iterator I = bugReports.begin(), - E = bugReports.end(); - I != E; ++I) { - errorNodes.push_back((*I)->getErrorNode()); + E = bugReports.end(); I != E; ++I) { + if ((*I)->isValid()) { + HasValid = true; + errorNodes.push_back((*I)->getErrorNode()); + } else { + errorNodes.push_back(0); + } } + // If all the reports have been marked invalid by a previous path generation, + // we're done. + if (!HasValid) + return false; + typedef PathDiagnosticConsumer::PathGenerationScheme PathGenerationScheme; PathGenerationScheme ActiveScheme = PC.getGenerationScheme(); -- 2.40.0