summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorAnton Yartsev <anton.yartsev@gmail.com>2015-10-28 20:43:39 +0000
committerAnton Yartsev <anton.yartsev@gmail.com>2015-10-28 20:43:39 +0000
commit522ccb9d80859f36b044a46753f22de6a1ba994a (patch)
treed3323d754e49761b227dc06b427a15dc1fc2c84b /clang
parent6ac3fe2ab7f261fed8a34e3d0e705055e8c7f64e (diff)
downloadbcm5719-llvm-522ccb9d80859f36b044a46753f22de6a1ba994a.tar.gz
bcm5719-llvm-522ccb9d80859f36b044a46753f22de6a1ba994a.zip
[analyzer] Preserve the order checkers were enabled/disabled.
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. llvm-svn: 251552
Diffstat (limited to 'clang')
-rwxr-xr-xclang/tools/scan-build/scan-build23
1 files changed, 19 insertions, 4 deletions
diff --git a/clang/tools/scan-build/scan-build b/clang/tools/scan-build/scan-build
index 50193edd83a..24796c7ae28 100755
--- a/clang/tools/scan-build/scan-build
+++ b/clang/tools/scan-build/scan-build
@@ -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}"; }
OpenPOWER on IntegriCloud