This isn't really specific to the new edge generation, is it? Why put it in 
optimizeEdges?

(We already have removeRedundantMsgs for another set of, uh, redundant 
messages.)

Jordan


On May 22, 2013, at 12:10 , Ted Kremenek <[email protected]> wrote:

> 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;
> 
> 
> _______________________________________________
> cfe-commits mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to