diff options
| author | Ted Kremenek <kremenek@apple.com> | 2015-08-08 17:58:47 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2015-08-08 17:58:47 +0000 |
| commit | 0270a08ebfcfe74e75d576fa4718c5fc6f44c6dc (patch) | |
| tree | 6a0d5c3c15f7d494b94b850d013c16fd297650e0 /clang | |
| parent | e880ae9e1a0e634621516eb22055f8e087a1702d (diff) | |
| download | bcm5719-llvm-0270a08ebfcfe74e75d576fa4718c5fc6f44c6dc.tar.gz bcm5719-llvm-0270a08ebfcfe74e75d576fa4718c5fc6f44c6dc.zip | |
[Static Analyzer] Add --analyzer-target option to scan-build.
When interposing on a compiler doing cross-compilation, scan-build
does not infer the target triple needed to pass to clang for
doing static analysis. The --analyzer-target option allows one
to manually specify the target triple used during static analysis
(and only static analysis) for such cases.
Patch by Honggyu Kim!
Reviewed in http://reviews.llvm.org/D10356.
llvm-svn: 244400
Diffstat (limited to 'clang')
| -rwxr-xr-x | clang/tools/scan-build/ccc-analyzer | 7 | ||||
| -rwxr-xr-x | clang/tools/scan-build/scan-build | 31 |
2 files changed, 37 insertions, 1 deletions
diff --git a/clang/tools/scan-build/ccc-analyzer b/clang/tools/scan-build/ccc-analyzer index 14591aef57c..3de63592f6d 100755 --- a/clang/tools/scan-build/ccc-analyzer +++ b/clang/tools/scan-build/ccc-analyzer @@ -68,6 +68,7 @@ my $Clang; my $DefaultCCompiler; my $DefaultCXXCompiler; my $IsCXX; +my $AnalyzerTarget; # If on OSX, use xcrun to determine the SDK root. my $UseXCRUN = 0; @@ -104,6 +105,8 @@ else { $IsCXX = 0 } +$AnalyzerTarget = $ENV{'CLANG_ANALYZER_TARGET'}; + ##===----------------------------------------------------------------------===## # Cleanup. ##===----------------------------------------------------------------------===## @@ -245,6 +248,10 @@ sub Analyze { push @Args, "-Xclang", "-analyzer-viz-egraph-ubigraph"; } + if (defined $AnalyzerTarget) { + push @Args, "-target", $AnalyzerTarget; + } + my $AnalysisArgs = GetCCArgs($HtmlDir, "--analyze", \@Args); @CmdArgs = @$AnalysisArgs; } diff --git a/clang/tools/scan-build/scan-build b/clang/tools/scan-build/scan-build index d7cadc3e59e..18ed5f1ab48 100755 --- a/clang/tools/scan-build/scan-build +++ b/clang/tools/scan-build/scan-build @@ -1145,10 +1145,21 @@ OPTIONS: scan-build to use a specific compiler for *compilation* then you can use this option to specify a path to that compiler. + If the given compiler is a cross compiler, you may also need to provide + --analyzer-target option to properly analyze the source code because static + analyzer runs as if the code is compiled for the host machine by default. + --use-c++ [compiler path] --use-c++=[compiler path] - This is the same as "-use-cc" but for C++ code. + This is the same as "--use-cc" but for C++ code. + + --analyzer-target [target triple name for analysis] + --analyzer-target=[target triple name for analysis] + + This provides target triple information to clang static analyzer. + It only changes the target for analysis but doesn't change the target of a + real compiler given by --use-cc and --use-c++ options. -v @@ -1462,6 +1473,24 @@ while (@ARGV) { next; } + if ($arg =~ /^--analyzer-target(=(.+))?$/) { + shift @ARGV; + my $AnalyzerTarget; + + if (!defined $2 || $2 eq "") { + if (!@ARGV) { + DieDiag("'--analyzer-target' option requires a target triple name.\n"); + } + $AnalyzerTarget = shift @ARGV; + } + else { + $AnalyzerTarget = $2; + } + + $ENV{"CLANG_ANALYZER_TARGET"} = $AnalyzerTarget; + next; + } + if ($arg eq "-v") { shift @ARGV; $Verbose++; |

