diff options
author | Anton Yartsev <anton.yartsev@gmail.com> | 2015-10-28 16:28:57 +0000 |
---|---|---|
committer | Anton Yartsev <anton.yartsev@gmail.com> | 2015-10-28 16:28:57 +0000 |
commit | 5d381bc775a6f3e088176670dbfae469126fdfbb (patch) | |
tree | dd8eca7d846d328a3e3131047641382658fa9e82 | |
parent | b12d668e3d8c6b8fb327c6aff5f4620f60ea7b95 (diff) | |
download | bcm5719-llvm-5d381bc775a6f3e088176670dbfae469126fdfbb.tar.gz bcm5719-llvm-5d381bc775a6f3e088176670dbfae469126fdfbb.zip |
[analyzer] Make inclusion/exclusion of checkers less ambiguous.
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.
llvm-svn: 251524
-rwxr-xr-x | clang/tools/scan-build/scan-build | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/clang/tools/scan-build/scan-build b/clang/tools/scan-build/scan-build index 4b34256e180..50193edd83a 100755 --- a/clang/tools/scan-build/scan-build +++ b/clang/tools/scan-build/scan-build @@ -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}"; } |