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

Jordan Rose jordan_rose at apple.com
Wed May 22 12:14:06 PDT 2013


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 <kremenek at apple.com> 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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list