]> granicus.if.org Git - clang/commitdiff
[analyzer] Make inclusion/exclusion of checkers less ambiguous.
authorAnton Yartsev <anton.yartsev@gmail.com>
Wed, 28 Oct 2015 16:28:57 +0000 (16:28 +0000)
committerAnton Yartsev <anton.yartsev@gmail.com>
Wed, 28 Oct 2015 16:28:57 +0000 (16:28 +0000)
A checker may be enabled/disabled multiple times via -enable-checker and -disable-checker scan-build arguments. Currently the conflicting and repetitive arguments are passed to the analyzer as is.
With this patch only the last enable/disable of a particular checker is accepted and passed to the analyzer.
This change is mostly done for the upcoming 'config for scan-build' patch when multiple inclusions/exclusions of a checker are expected to be more common.

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

tools/scan-build/scan-build

index 4b34256e1808e0cf87a164a732b0898e5388df35..50193edd83abb842534741980826a5bd1e50dedc 100755 (executable)
@@ -54,8 +54,8 @@ my %Options = (
   ViewResults => 0,          # View results when the build terminates.
   ExitStatusFoundBugs => 0,  # Exit status reflects whether bugs were found
   KeepEmpty => 0,            # Don't remove output directory even with 0 results.
-  EnableCheckers => [],
-  DisableCheckers => [],
+  EnableCheckers => {},
+  DisableCheckers => {},
   UseCC => undef,            # C compiler to use for compilation.
   UseCXX => undef,           # C++ compiler to use for compilation.
   AnalyzerTarget => undef,
@@ -1630,13 +1630,17 @@ sub ProcessArgs {
 
     if ($arg eq "-enable-checker") {
       shift @$Args;
-      push @{$Options{EnableCheckers}}, shift @$Args;
+      my $Checker = shift @$Args;
+      $Options{EnableCheckers}{$Checker} = 1;
+      delete $Options{DisableCheckers}{$Checker};
       next;
     }
 
     if ($arg eq "-disable-checker") {
       shift @$Args;
-      push @{$Options{DisableCheckers}}, shift @$Args;
+      my $Checker = shift @$Args;
+      $Options{DisableCheckers}{$Checker} = 1;
+      delete $Options{EnableCheckers}{$Checker};
       next;
     }
 
@@ -1747,8 +1751,8 @@ Diag("Using '$Clang' for static analysis\n");
 SetHtmlEnv(\@ARGV, $Options{OutputDir});
 
 my @AnalysesToRun;
-foreach (@{$Options{EnableCheckers}}) { push @AnalysesToRun, "-analyzer-checker", $_; }
-foreach (@{$Options{DisableCheckers}}) { push @AnalysesToRun, "-analyzer-disable-checker", $_; }
+foreach (keys %{$Options{EnableCheckers}}) { push @AnalysesToRun, "-analyzer-checker", $_; }
+foreach (keys %{$Options{DisableCheckers}}) { 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}"; }