]> granicus.if.org Git - clang/commitdiff
[analyzer] Preserve the order checkers were enabled/disabled.
authorAnton Yartsev <anton.yartsev@gmail.com>
Wed, 28 Oct 2015 20:43:39 +0000 (20:43 +0000)
committerAnton Yartsev <anton.yartsev@gmail.com>
Wed, 28 Oct 2015 20:43:39 +0000 (20:43 +0000)
In addition to r251524: preserve the order the checkers were enabled/disabled to be deterministic.
Additionally return the number of arguments read by 'ProcessArgs' - for debug purpose.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@251552 91177308-0d34-0410-b5e6-96231b3b80d8

tools/scan-build/scan-build

index 50193edd83abb842534741980826a5bd1e50dedc..24796c7ae28fdb278dcfecdab26242535c608a08 100755 (executable)
@@ -1447,9 +1447,12 @@ my $ForceDisplayHelp = 0;
 
 sub ProcessArgs {
   my $Args = shift;
+  my $NumArgs = 0;
 
   while (@$Args) {
 
+    $NumArgs++;
+
     # Scan for options we recognize.
 
     my $arg = $Args->[0];
@@ -1631,7 +1634,8 @@ sub ProcessArgs {
     if ($arg eq "-enable-checker") {
       shift @$Args;
       my $Checker = shift @$Args;
-      $Options{EnableCheckers}{$Checker} = 1;
+      # Store $NumArgs to preserve the order the checkers were enabled.
+      $Options{EnableCheckers}{$Checker} = $NumArgs;
       delete $Options{DisableCheckers}{$Checker};
       next;
     }
@@ -1639,7 +1643,8 @@ sub ProcessArgs {
     if ($arg eq "-disable-checker") {
       shift @$Args;
       my $Checker = shift @$Args;
-      $Options{DisableCheckers}{$Checker} = 1;
+      # Store $NumArgs to preserve the order the checkers were disabled.
+      $Options{DisableCheckers}{$Checker} = $NumArgs;
       delete $Options{EnableCheckers}{$Checker};
       next;
     }
@@ -1676,8 +1681,10 @@ sub ProcessArgs {
 
     DieDiag("unrecognized option '$arg'\n") if ($arg =~ /^-/);
 
+    $NumArgs--;
     last;
   }
+  return $NumArgs;
 }
 
 if (!@ARGV) {
@@ -1751,8 +1758,16 @@ Diag("Using '$Clang' for static analysis\n");
 SetHtmlEnv(\@ARGV, $Options{OutputDir});
 
 my @AnalysesToRun;
-foreach (keys %{$Options{EnableCheckers}}) { push @AnalysesToRun, "-analyzer-checker", $_; }
-foreach (keys %{$Options{DisableCheckers}}) { push @AnalysesToRun, "-analyzer-disable-checker", $_; }
+foreach (sort { $Options{EnableCheckers}{$a} <=> $Options{EnableCheckers}{$b} } 
+         keys %{$Options{EnableCheckers}}) { 
+  # Push checkers in order they were enabled.
+  push @AnalysesToRun, "-analyzer-checker", $_;
+}
+foreach (sort { $Options{DisableCheckers}{$a} <=> $Options{DisableCheckers}{$b} } 
+         keys %{$Options{DisableCheckers}}) { 
+  # Push checkers in order they were disabled.
+  push @AnalysesToRun, "-analyzer-disable-checker", $_;
+}
 if ($Options{AnalyzeHeaders}) { push @AnalysesToRun, "-analyzer-opt-analyze-headers"; }
 if ($Options{AnalyzerStats}) { push @AnalysesToRun, '-analyzer-checker=debug.Stats'; }
 if ($Options{MaxLoop} > 0) { push @AnalysesToRun, "-analyzer-max-loop $Options{MaxLoop}"; }