r182505 - [analyzer; alternate edges] remove redundant adjacent "events" with the same text.

Ted Kremenek kremenek at apple.com
Wed May 22 12:10:41 PDT 2013


Author: kremenek
Date: Wed May 22 14:10:41 2013
New Revision: 182505

URL: http://llvm.org/viewvc/llvm-project?rev=182505&view=rev
Log:
[analyzer; alternate edges] remove redundant adjacent "events" with the same text.

Fixes <rdar://problem/13949982>

Modified:
    cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp

Modified: cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp?rev=182505&r1=182504&r2=182505&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp Wed May 22 14:10:41 2013
@@ -2026,6 +2026,31 @@ static void removePunyEdges(PathPieces &
   }
 }
 
+static void removeIdenticalEvents(PathPieces &path) {
+  for (PathPieces::iterator I = path.begin(), E = path.end(); I != E; ++I) {
+    PathDiagnosticEventPiece *PieceI =
+      dyn_cast<PathDiagnosticEventPiece>(*I);
+
+    if (!PieceI)
+      continue;
+
+    PathPieces::iterator NextI = I; ++NextI;
+    if (NextI == E)
+      return;
+
+    PathDiagnosticEventPiece *PieceNextI =
+      dyn_cast<PathDiagnosticEventPiece>(*I);
+
+    if (!PieceNextI)
+      continue;
+
+    // Erase the second piece if it has the same exact message text.
+    if (PieceI->getString() == PieceNextI->getString()) {
+      path.erase(NextI);
+    }
+  }
+}
+
 static bool optimizeEdges(PathPieces &path, SourceManager &SM,
                           OptimizedCallsSet &OCS,
                           LocationContextMap &LCM) {
@@ -2199,6 +2224,8 @@ static bool optimizeEdges(PathPieces &pa
   if (!hasChanges) {
     // Remove any puny edges left over after primary optimization pass.
     removePunyEdges(path, SM, PM);
+    // Remove identical events.
+    removeIdenticalEvents(path);
   }
 
   return hasChanges;





More information about the cfe-commits mailing list