]> granicus.if.org Git - clang/commitdiff
[analyzer] Don't repeat a bug equivalence class if every report is invalid.
authorJordan Rose <jordan_rose@apple.com>
Sat, 16 Mar 2013 01:07:47 +0000 (01:07 +0000)
committerJordan Rose <jordan_rose@apple.com>
Sat, 16 Mar 2013 01:07:47 +0000 (01:07 +0000)
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

index 1dca2b5206ed9e1011c2d54baa2f0ce7b03c6c82..46108f44ea42842955b80cb4af481edb219f2965 100644 (file)
@@ -2114,13 +2114,23 @@ bool GRBugReporter::generatePathDiagnostic(PathDiagnostic& PD,
                                            ArrayRef<BugReport *> &bugReports) {
   assert(!bugReports.empty());
 
+  bool HasValid = false;
   SmallVector<const ExplodedNode *, 32> errorNodes;
   for (ArrayRef<BugReport*>::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();