aabbaabb created this revision. aabbaabb added reviewers: xazax.hun, phosek. Herald added subscribers: cfe-commits, rnkovacs, whisperity. Herald added a project: clang. aabbaabb requested review of this revision.
Excluded folders in scan build is turned to absolute path before comapre to 'file' in cdb. 'file' in cdb might be a path relative to 'directory', so we need to turn it to absolute path before comparison. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D90362 Files: clang/tools/scan-build-py/libscanbuild/analyze.py Index: clang/tools/scan-build-py/libscanbuild/analyze.py =================================================================== --- clang/tools/scan-build-py/libscanbuild/analyze.py +++ clang/tools/scan-build-py/libscanbuild/analyze.py @@ -207,10 +207,14 @@ def run_analyzer_parallel(args): """ Runs the analyzer against the given compilation database. """ - def exclude(filename): + def exclude(filename, directory): """ Return true when any excluded directory prefix the filename. """ - return any(re.match(r'^' + directory, filename) - for directory in args.excludes) + if not os.path.isabs(filename): + # filename is either absolute or relative to directory. Need to turn + # it to absolute since 'args.excludes' are absolute paths. + filename = os.path.normpath(os.path.join(directory, filename)) + return any(re.match(r'^' + exclude_directory, filename) + for exclude_directory in args.excludes) consts = { 'clang': args.clang, @@ -225,7 +229,8 @@ logging.debug('run analyzer against compilation database') with open(args.cdb, 'r') as handle: generator = (dict(cmd, **consts) - for cmd in json.load(handle) if not exclude(cmd['file'])) + for cmd in json.load(handle) if not exclude( + cmd['file'], cmd['directory'])) # when verbose output requested execute sequentially pool = multiprocessing.Pool(1 if args.verbose > 2 else None) for current in pool.imap_unordered(run, generator):
Index: clang/tools/scan-build-py/libscanbuild/analyze.py =================================================================== --- clang/tools/scan-build-py/libscanbuild/analyze.py +++ clang/tools/scan-build-py/libscanbuild/analyze.py @@ -207,10 +207,14 @@ def run_analyzer_parallel(args): """ Runs the analyzer against the given compilation database. """ - def exclude(filename): + def exclude(filename, directory): """ Return true when any excluded directory prefix the filename. """ - return any(re.match(r'^' + directory, filename) - for directory in args.excludes) + if not os.path.isabs(filename): + # filename is either absolute or relative to directory. Need to turn + # it to absolute since 'args.excludes' are absolute paths. + filename = os.path.normpath(os.path.join(directory, filename)) + return any(re.match(r'^' + exclude_directory, filename) + for exclude_directory in args.excludes) consts = { 'clang': args.clang, @@ -225,7 +229,8 @@ logging.debug('run analyzer against compilation database') with open(args.cdb, 'r') as handle: generator = (dict(cmd, **consts) - for cmd in json.load(handle) if not exclude(cmd['file'])) + for cmd in json.load(handle) if not exclude( + cmd['file'], cmd['directory'])) # when verbose output requested execute sequentially pool = multiprocessing.Pool(1 if args.verbose > 2 else None) for current in pool.imap_unordered(run, generator):
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits