Author: ayartsev Date: Fri Sep 11 15:41:09 2015 New Revision: 247466 URL: http://llvm.org/viewvc/llvm-project?rev=247466&view=rev Log: [analyzer] Improve behavior if Clang not found.
- Eliminate 'No such file or directory at scan-build line ...' error if '$RealBin/bin/clang' or '$RealBin/clang' directory does not exist. - Eliminate 'Use of uninitialized value $Clang in concatenation (.) or string at scan-build line ...' error if help is displayed while $Clang was not found. Modified: cfe/trunk/tools/scan-build/scan-build Modified: cfe/trunk/tools/scan-build/scan-build URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/scan-build/scan-build?rev=247466&r1=247465&r2=247466&view=diff ============================================================================== --- cfe/trunk/tools/scan-build/scan-build (original) +++ cfe/trunk/tools/scan-build/scan-build Fri Sep 11 15:41:09 2015 @@ -1258,39 +1258,40 @@ LOADING CHECKERS: -load-plugin [plugin library] ENDTEXT - # Query clang for list of checkers that are enabled. - - # create a list to load the plugins via the 'Xclang' command line - # argument - my @PluginLoadCommandline_xclang; - foreach my $param ( @{$Options{PluginsToLoad}} ) { - push ( @PluginLoadCommandline_xclang, "-Xclang" ); - push ( @PluginLoadCommandline_xclang, "-load" ); - push ( @PluginLoadCommandline_xclang, "-Xclang" ); - push ( @PluginLoadCommandline_xclang, $param ); - } + if (defined $Clang && -x $Clang) { + # Query clang for list of checkers that are enabled. - my %EnabledCheckers; - foreach my $lang ("c", "objective-c", "objective-c++", "c++") { - my $ExecLine = join(' ', qq/"$Clang"/, @PluginLoadCommandline_xclang, "--analyze", "-x", $lang, "-", "-###", "2>&1", "|"); - open(PS, $ExecLine); - while (<PS>) { - foreach my $val (split /\s+/) { - $val =~ s/\"//g; - if ($val =~ /-analyzer-checker\=([^\s]+)/) { - $EnabledCheckers{$1} = 1; + # create a list to load the plugins via the 'Xclang' command line + # argument + my @PluginLoadCommandline_xclang; + foreach my $param ( @{$Options{PluginsToLoad}} ) { + push ( @PluginLoadCommandline_xclang, "-Xclang" ); + push ( @PluginLoadCommandline_xclang, "-load" ); + push ( @PluginLoadCommandline_xclang, "-Xclang" ); + push ( @PluginLoadCommandline_xclang, $param ); + } + + my %EnabledCheckers; + foreach my $lang ("c", "objective-c", "objective-c++", "c++") { + my $ExecLine = join(' ', qq/"$Clang"/, @PluginLoadCommandline_xclang, "--analyze", "-x", $lang, "-", "-###", "2>&1", "|"); + open(PS, $ExecLine); + while (<PS>) { + foreach my $val (split /\s+/) { + $val =~ s/\"//g; + if ($val =~ /-analyzer-checker\=([^\s]+)/) { + $EnabledCheckers{$1} = 1; + } } } } - } - # Query clang for complete list of checkers. - my @PluginLoadCommandline; - foreach my $param ( @{$Options{PluginsToLoad}} ) { - push ( @PluginLoadCommandline, "-load" ); - push ( @PluginLoadCommandline, $param ); - } - if (defined $Clang && -x $Clang) { + # Query clang for complete list of checkers. + my @PluginLoadCommandline; + foreach my $param ( @{$Options{PluginsToLoad}} ) { + push ( @PluginLoadCommandline, "-load" ); + push ( @PluginLoadCommandline, $param ); + } + my $ExecLine = join(' ', qq/"$Clang"/, "-cc1", @PluginLoadCommandline, "-analyzer-checker-help", "2>&1", "|"); open(PS, $ExecLine); my $foundCheckers = 0; @@ -1634,6 +1635,7 @@ if (!@ARGV) { } ProcessArgs(\@ARGV); +# All arguments are now shifted from @ARGV. The rest is a build command, if any. if (!@ARGV and !$RequestDisplayHelp) { ErrorDiag("No build command specified.\n\n"); @@ -1642,9 +1644,9 @@ if (!@ARGV and !$RequestDisplayHelp) { # Find 'clang' if (!defined $Options{AnalyzerDiscoveryMethod}) { - $Clang = Cwd::realpath("$RealBin/bin/clang"); + $Clang = Cwd::realpath("$RealBin/bin/clang") if (-d "$RealBin/bin/clang"); if (!defined $Clang || ! -x $Clang) { - $Clang = Cwd::realpath("$RealBin/clang"); + $Clang = Cwd::realpath("$RealBin/clang") if (-d "$RealBin/clang"); } if (!defined $Clang || ! -x $Clang) { if (!$RequestDisplayHelp && !$ForceDisplayHelp) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits