[cfe-commits] r157452 - in /cfe/trunk/tools/scan-build: ccc-analyzer scan-build
Anna Zaks
ganna at apple.com
Thu May 24 18:13:51 PDT 2012
Author: zaks
Date: Thu May 24 20:13:50 2012
New Revision: 157452
URL: http://llvm.org/viewvc/llvm-project?rev=157452&view=rev
Log:
[analyzer] Loading external plugins with scan-build
Load custom plugins when running scan-build. This is useful when
additional static analysis Checkers must be provided via clang's plugin
interface.
Loading additional plugins can now be done via the scan-build call:
scan-build -load-plugin <plugin.so>
A patch by Thomas Hauth.
Modified:
cfe/trunk/tools/scan-build/ccc-analyzer
cfe/trunk/tools/scan-build/scan-build
Modified: cfe/trunk/tools/scan-build/ccc-analyzer
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/scan-build/ccc-analyzer?rev=157452&r1=157451&r2=157452&view=diff
==============================================================================
--- cfe/trunk/tools/scan-build/ccc-analyzer (original)
+++ cfe/trunk/tools/scan-build/ccc-analyzer Thu May 24 20:13:50 2012
@@ -434,6 +434,9 @@
# Get the analysis options.
my $Analyses = $ENV{'CCC_ANALYZER_ANALYSIS'};
+# Get the plugins to load.
+my $Plugins = $ENV{'CCC_ANALYZER_PLUGINS'};
+
# Get the store model.
my $StoreModel = $ENV{'CCC_ANALYZER_STORE_MODEL'};
@@ -649,6 +652,10 @@
push @AnalyzeArgs, split '\s+', $Analyses;
}
+ if (defined $Plugins) {
+ push @AnalyzeArgs, split '\s+', $Plugins;
+ }
+
if (defined $OutputFormat) {
push @AnalyzeArgs, "-analyzer-output=" . $OutputFormat;
if ($OutputFormat =~ /plist/) {
Modified: cfe/trunk/tools/scan-build/scan-build
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/scan-build/scan-build?rev=157452&r1=157451&r2=157452&view=diff
==============================================================================
--- cfe/trunk/tools/scan-build/scan-build (original)
+++ cfe/trunk/tools/scan-build/scan-build Thu May 24 20:13:50 2012
@@ -36,6 +36,7 @@
my $CurrentDir = HtmlEscape(getcwd());
my $CurrentDirSuffix = basename($CurrentDir);
+my @PluginsToLoad;
my $CmdArgs;
my $HtmlTitle;
@@ -1032,9 +1033,23 @@
-enable-checker [checker name]
-disable-checker [checker name]
+
+LOADING CHECKERS:
+
+ Loading external checkers using the clang plugin interface:
+
+ -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 ( @PluginsToLoad ) {
+ push ( @PluginLoadCommandline_xclang, "-Xclang" );
+ push ( @PluginLoadCommandline_xclang, $param );
+}
my %EnabledCheckers;
foreach my $lang ("c", "objective-c", "objective-c++", "c++") {
pipe(FROM_CHILD, TO_PARENT);
@@ -1043,7 +1058,7 @@
close FROM_CHILD;
open(STDOUT,">&", \*TO_PARENT);
open(STDERR,">&", \*TO_PARENT);
- exec $Clang, ('--analyze', '-x', $lang, '-', '-###');
+ exec $Clang, ( @PluginLoadCommandline_xclang, '--analyze', '-x', $lang, '-', '-###');
}
close(TO_PARENT);
while(<FROM_CHILD>) {
@@ -1065,7 +1080,7 @@
close FROM_CHILD;
open(STDOUT,">&", \*TO_PARENT);
open(STDERR,">&", \*TO_PARENT);
- exec $Clang, ('-cc1', '-analyzer-checker-help');
+ exec $Clang, ('-cc1', @PluginsToLoad , '-analyzer-checker-help');
}
close(TO_PARENT);
my $foundCheckers = 0;
@@ -1101,7 +1116,9 @@
if ($EnabledCheckers{$aggregate}) {
$enabled =1;
last;
- }
+ }
+ # append a dot, if an additional domain is added in the next iteration
+ $aggregate .= ".";
}
if ($enabled) {
@@ -1344,7 +1361,12 @@
push @AnalysesToRun, "-analyzer-disable-checker", shift @ARGV;
next;
}
-
+ if ($arg eq "-load-plugin") {
+ shift @ARGV;
+ push @PluginsToLoad, "-load", shift @ARGV;
+ next;
+ }
+
DieDiag("unrecognized option '$arg'\n") if ($arg =~ /^-/);
last;
@@ -1412,6 +1434,8 @@
$ENV{'CCC_ANALYZER_ANALYSIS'} = join ' ', at AnalysesToRun;
+$ENV{'CCC_ANALYZER_PLUGINS'} = join ' ', at PluginsToLoad;
+
if (defined $StoreModel) {
$ENV{'CCC_ANALYZER_STORE_MODEL'} = $StoreModel;
}
More information about the cfe-commits
mailing list