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