summaryrefslogtreecommitdiffstats
path: root/clang/tools/scan-build-py/libscanbuild/report.py
diff options
context:
space:
mode:
authorGabor Horvath <xazax.hun@gmail.com>2018-02-28 13:23:10 +0000
committerGabor Horvath <xazax.hun@gmail.com>2018-02-28 13:23:10 +0000
commiteb0584bee413c5b0f3275e47d6153433c8a3130f (patch)
treee9f412f0f0fe6c8a291bd02ecadaec4ccbd79b52 /clang/tools/scan-build-py/libscanbuild/report.py
parent4529aac2de3ffccbf015503681bb5c9712e295b7 (diff)
downloadbcm5719-llvm-eb0584bee413c5b0f3275e47d6153433c8a3130f.tar.gz
bcm5719-llvm-eb0584bee413c5b0f3275e47d6153433c8a3130f.zip
[analyzer] Support for naive cross translation unit analysis
The aim of this patch is to be minimal to enable incremental development of the feature on the top of the tree. This patch should be an NFC when the feature is turned off. It is turned off by default and still considered as experimental. Technical details are available in the EuroLLVM Talk: http://llvm.org/devmtg/2017-03//2017/02/20/accepted-sessions.html#7 Note that the initial prototype was done by A. Sidorin et al.: http://lists.llvm.org/pipermail/cfe-dev/2015-October/045730.html Contributions to the measurements and the new version of the code: Peter Szecsi, Zoltan Gera, Daniel Krupp, Kareem Khazem. Differential Revision: https://reviews.llvm.org/D30691 llvm-svn: 326323
Diffstat (limited to 'clang/tools/scan-build-py/libscanbuild/report.py')
-rw-r--r--clang/tools/scan-build-py/libscanbuild/report.py22
1 files changed, 13 insertions, 9 deletions
diff --git a/clang/tools/scan-build-py/libscanbuild/report.py b/clang/tools/scan-build-py/libscanbuild/report.py
index 54b9695d927..b3753c1d9d4 100644
--- a/clang/tools/scan-build-py/libscanbuild/report.py
+++ b/clang/tools/scan-build-py/libscanbuild/report.py
@@ -13,7 +13,6 @@ import os
import os.path
import sys
import shutil
-import itertools
import plistlib
import glob
import json
@@ -255,24 +254,29 @@ def read_crashes(output_dir):
def read_bugs(output_dir, html):
+ # type: (str, bool) -> Generator[Dict[str, Any], None, None]
""" Generate a unique sequence of bugs from given output directory.
Duplicates can be in a project if the same module was compiled multiple
times with different compiler options. These would be better to show in
the final report (cover) only once. """
- parser = parse_bug_html if html else parse_bug_plist
- pattern = '*.html' if html else '*.plist'
+ def empty(file_name):
+ return os.stat(file_name).st_size == 0
duplicate = duplicate_check(
lambda bug: '{bug_line}.{bug_path_length}:{bug_file}'.format(**bug))
- bugs = itertools.chain.from_iterable(
- # parser creates a bug generator not the bug itself
- parser(filename)
- for filename in glob.iglob(os.path.join(output_dir, pattern)))
-
- return (bug for bug in bugs if not duplicate(bug))
+ # get the right parser for the job.
+ parser = parse_bug_html if html else parse_bug_plist
+ # get the input files, which are not empty.
+ pattern = os.path.join(output_dir, '*.html' if html else '*.plist')
+ bug_files = (file for file in glob.iglob(pattern) if not empty(file))
+
+ for bug_file in bug_files:
+ for bug in parser(bug_file):
+ if not duplicate(bug):
+ yield bug
def parse_bug_plist(filename):
OpenPOWER on IntegriCloud