Skip to content

Commit

Permalink
scan-build: Add support of the option --exclude like in scan-build-py
Browse files Browse the repository at this point in the history
Summary:
To exclude thirdparty code.

To test:
With /tmp/foo.c
  
```
void test() {
    int x;
    x = 1; // warn
}  
```

```
$ scan-build --exclude non-existing/  --exclude /tmp/ -v gcc -c foo.c                                                                                                                                                                                   

scan-build: Using '/usr/lib/llvm-7/bin/clang' for static analysis
scan-build: Emitting reports for this run to '/tmp/scan-build-2018-09-16-214531-8410-1'.
foo.c:3:3: warning: Value stored to 'x' is never read
  x = 1; // warn
  ^   ~
1 warning generated.
scan-build: File '/tmp/foo.c' deleted: part of an ignored directory.
scan-build: 0 bugs found.
```

Reviewers: jroelofs

Reviewed By: jroelofs

Subscribers: whisperity, cfe-commits

Differential Revision: https://reviews.llvm.org/D52153

llvm-svn: 342359
  • Loading branch information
sylvestre committed Sep 17, 2018
1 parent 00f51c0 commit ae48d78
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions clang/tools/scan-build/bin/scan-build
Expand Up @@ -58,6 +58,7 @@ my %Options = (
KeepEmpty => 0, # Don't remove output directory even with 0 results.
EnableCheckers => {},
DisableCheckers => {},
Excludes => [],
UseCC => undef, # C compiler to use for compilation.
UseCXX => undef, # C++ compiler to use for compilation.
AnalyzerTarget => undef,
Expand Down Expand Up @@ -420,6 +421,20 @@ sub ScanFile {
# The file no longer exists: use the original path.
$BugFile = $1;
}

# Get just the path
my $p = dirname($BugFile);
# Check if the path is found in the list of exclude
if (grep { $p =~ m/$_/ } @{$Options{Excludes}}) {
if ($Options{Verbose}) {
Diag("File '$BugFile' deleted: part of an ignored directory.\n");
}

# File in an ignored directory. Remove it
unlink("$Dir/$FName");
return;
}

UpdatePrefix($BugFile);
}
elsif (/<!-- BUGPATHLENGTH (.*) -->$/) {
Expand Down Expand Up @@ -1194,6 +1209,12 @@ OPTIONS:
command. Specifying this option causes the exit status of scan-build to be 1
if it found potential bugs and 0 otherwise.
--exclude <path>
Do not run static analyzer against files found in this
directory (You can specify this option multiple times).
Could be useful when project contains 3rd party libraries.
--use-cc [compiler path]
--use-cc=[compiler path]
Expand Down Expand Up @@ -1698,6 +1719,15 @@ sub ProcessArgs {
next;
}

if ($arg eq "--exclude") {
shift @$Args;
my $arg = shift @$Args;
# Remove the trailing slash if any
$arg =~ s|/$||;
push @{$Options{Excludes}}, $arg;
next;
}

if ($arg eq "-load-plugin") {
shift @$Args;
push @{$Options{PluginsToLoad}}, shift @$Args;
Expand Down

0 comments on commit ae48d78

Please sign in to comment.