diff options
author | Csaba Dabis <dabis.csaba98@gmail.com> | 2019-08-24 12:17:49 +0000 |
---|---|---|
committer | Csaba Dabis <dabis.csaba98@gmail.com> | 2019-08-24 12:17:49 +0000 |
commit | 0d7252b783697c2737069ffd91f7195eaa1afdc3 (patch) | |
tree | 50a01c892287987bea6406c364f697938935d9c6 | |
parent | 6d5a8c92bfd4edcd4d43db8b613bc6712e4f6e4c (diff) | |
download | bcm5719-llvm-0d7252b783697c2737069ffd91f7195eaa1afdc3.tar.gz bcm5719-llvm-0d7252b783697c2737069ffd91f7195eaa1afdc3.zip |
[analyzer] Analysis: Fix checker silencing
llvm-svn: 369845
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 51 | ||||
-rwxr-xr-x | clang/tools/scan-build/bin/scan-build | 13 |
2 files changed, 35 insertions, 29 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index c45b7517133..0e222b95dde 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -464,22 +464,6 @@ static void parseAnalyzerConfigs(AnalyzerOptions &AnOpts, // At this point, AnalyzerOptions is configured. Let's validate some options. - if (!Diags) - return; - - if (AnOpts.ShouldTrackConditionsDebug && !AnOpts.ShouldTrackConditions) - Diags->Report(diag::err_analyzer_config_invalid_input) - << "track-conditions-debug" << "'track-conditions' to also be enabled"; - - if (!AnOpts.CTUDir.empty() && !llvm::sys::fs::is_directory(AnOpts.CTUDir)) - Diags->Report(diag::err_analyzer_config_invalid_input) << "ctu-dir" - << "a filename"; - - if (!AnOpts.ModelPath.empty() && - !llvm::sys::fs::is_directory(AnOpts.ModelPath)) - Diags->Report(diag::err_analyzer_config_invalid_input) << "model-path" - << "a filename"; - // FIXME: Here we try to validate the silenced checkers or packages are valid. // The current approach only validates the registered checkers which does not // contain the runtime enabled checkers and optimally we would validate both. @@ -493,18 +477,37 @@ static void parseAnalyzerConfigs(AnalyzerOptions &AnOpts, AnOpts.RawSilencedCheckersAndPackages.split(CheckersAndPackages, ";"); for (const StringRef CheckerOrPackage : CheckersAndPackages) { - bool IsChecker = CheckerOrPackage.contains('.'); - bool IsValidName = - IsChecker ? llvm::find(Checkers, CheckerOrPackage) != Checkers.end() - : llvm::find(Packages, CheckerOrPackage) != Packages.end(); - - if (!IsValidName) - Diags->Report(diag::err_unknown_analyzer_checker_or_package) - << CheckerOrPackage; + if (Diags) { + bool IsChecker = CheckerOrPackage.contains('.'); + bool IsValidName = + IsChecker + ? llvm::find(Checkers, CheckerOrPackage) != Checkers.end() + : llvm::find(Packages, CheckerOrPackage) != Packages.end(); + + if (!IsValidName) + Diags->Report(diag::err_unknown_analyzer_checker_or_package) + << CheckerOrPackage; + } AnOpts.SilencedCheckersAndPackages.emplace_back(CheckerOrPackage); } } + + if (!Diags) + return; + + if (AnOpts.ShouldTrackConditionsDebug && !AnOpts.ShouldTrackConditions) + Diags->Report(diag::err_analyzer_config_invalid_input) + << "track-conditions-debug" << "'track-conditions' to also be enabled"; + + if (!AnOpts.CTUDir.empty() && !llvm::sys::fs::is_directory(AnOpts.CTUDir)) + Diags->Report(diag::err_analyzer_config_invalid_input) << "ctu-dir" + << "a filename"; + + if (!AnOpts.ModelPath.empty() && + !llvm::sys::fs::is_directory(AnOpts.ModelPath)) + Diags->Report(diag::err_analyzer_config_invalid_input) << "model-path" + << "a filename"; } static bool ParseMigratorArgs(MigratorOptions &Opts, ArgList &Args) { diff --git a/clang/tools/scan-build/bin/scan-build b/clang/tools/scan-build/bin/scan-build index 37c94d5ec36..1574b10f205 100755 --- a/clang/tools/scan-build/bin/scan-build +++ b/clang/tools/scan-build/bin/scan-build @@ -1889,11 +1889,6 @@ foreach (sort { $Options{DisableCheckers}{$a} <=> $Options{DisableCheckers}{$b} # Push checkers in order they were disabled. push @AnalysesToRun, "-analyzer-disable-checker", $_; } -foreach (sort { $Options{SilenceCheckers}{$a} <=> $Options{SilenceCheckers}{$b} } - keys %{$Options{SilenceCheckers}}) { - # Push checkers in order they were silenced. - push @AnalysesToRun, "-analyzer-config silence-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}"; } @@ -1903,6 +1898,14 @@ if ($Options{MaxLoop} > 0) { push @AnalysesToRun, "-analyzer-max-loop $Options{M my $CCC_ANALYZER_ANALYSIS = join ' ', @AnalysesToRun; my $CCC_ANALYZER_PLUGINS = join ' ', map { "-load ".$_ } @{$Options{PluginsToLoad}}; my $CCC_ANALYZER_CONFIG = join ' ', map { "-analyzer-config ".$_ } @{$Options{ConfigOptions}}; + +foreach (sort { $Options{SilenceCheckers}{$a} <=> $Options{SilenceCheckers}{$b} } + keys %{$Options{SilenceCheckers}}) { + # Add checkers in order they were silenced. + $CCC_ANALYZER_CONFIG = + $CCC_ANALYZER_CONFIG." -analyzer-config silence-checkers=".$_; +} + my %EnvVars = ( 'CC' => $Cmd, 'CXX' => $CmdCXX, |