[PATCH] D70693: [scan-build-py] Set of small fixes
Gábor Horváth via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 25 13:05:41 PST 2019
xazax.hun created this revision.
xazax.hun added reviewers: NoQ, haowei, rizsotto.mailinglist.
Herald added subscribers: Charusso, gamesh411, Szelethus, dkrupp, rnkovacs, whisperity.
Herald added a project: clang.
xazax.hun added a subscriber: phosek.
This patch fix some small errors in scan-build-py, including:
- When invoking clang with `-###` and parsing error add `-fno-color-diagnostics` to the invocation to avoid problems parsing potential errors. This might be sub-optimal for users expecting to see the results in the command line and expecting to have colors. If we really want this to work I can either make the regex more forgiving or try to restore the `-fcolor-diagnostics`flag to its original state after the `-###` invocation.
- If a file was missing from a compilation database the whole analysis was stopped due to an unhandled exception.
- Fix two typos: analyzis -> analysis
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D70693
Files:
clang/tools/scan-build-py/libscanbuild/analyze.py
clang/tools/scan-build-py/libscanbuild/clang.py
Index: clang/tools/scan-build-py/libscanbuild/clang.py
===================================================================
--- clang/tools/scan-build-py/libscanbuild/clang.py
+++ clang/tools/scan-build-py/libscanbuild/clang.py
@@ -19,6 +19,11 @@
ACTIVE_CHECKER_PATTERN = re.compile(r'^-analyzer-checker=(.*)$')
+class ClangErrorException(Exception):
+ def __init__(self, error):
+ self.error = error
+
+
def get_version(clang):
""" Returns the compiler version as string.
@@ -39,13 +44,14 @@
cmd = command[:]
cmd.insert(1, '-###')
+ cmd.append('-fno-color-diagnostics')
output = run_command(cmd, cwd=cwd)
# The relevant information is in the last line of the output.
# Don't check if finding last line fails, would throw exception anyway.
last_line = output[-1]
if re.search(r'clang(.*): error:', last_line):
- raise Exception(last_line)
+ raise ClangErrorException(last_line)
return decode(last_line)
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
@@ -33,7 +33,8 @@
from libscanbuild.report import document
from libscanbuild.compilation import split_command, classify_source, \
compiler_language
-from libscanbuild.clang import get_version, get_arguments, get_triple_arch
+from libscanbuild.clang import get_version, get_arguments, get_triple_arch, \
+ ClangErrorException
from libscanbuild.shell import decode
__all__ = ['scan_build', 'analyze_build', 'analyze_compiler_wrapper']
@@ -435,7 +436,7 @@
of the compilation database.
This complex task is decomposed into smaller methods which are calling
- each other in chain. If the analyzis is not possible the given method
+ each other in chain. If the analysis is not possible the given method
just return and break the chain.
The passed parameter is a python dictionary. Each method first check
@@ -451,7 +452,7 @@
return arch_check(opts)
except Exception:
- logging.error("Problem occurred during analyzis.", exc_info=1)
+ logging.error("Problem occurred during analysis.", exc_info=1)
return None
@@ -490,10 +491,13 @@
os.close(handle)
# Execute Clang again, but run the syntax check only.
cwd = opts['directory']
- cmd = get_arguments(
- [opts['clang'], '-fsyntax-only', '-E'
- ] + opts['flags'] + [opts['file'], '-o', name], cwd)
- run_command(cmd, cwd=cwd)
+ cmd = [opts['clang'], '-fsyntax-only', '-E'] + opts['flags'] + \
+ [opts['file'], '-o', name]
+ try:
+ cmd = get_arguments(cmd, cwd)
+ run_command(cmd, cwd=cwd)
+ except ClangErrorException:
+ pass
# write general information about the crash
with open(name + '.info.txt', 'w') as handle:
handle.write(opts['file'] + os.linesep)
@@ -542,6 +546,12 @@
opts.update(result)
continuation(opts)
return result
+ except ClangErrorException as ex:
+ result = {'error_output': ex.error, 'exit_code': 0}
+ if opts.get('output_failures', False):
+ opts.update(result)
+ continuation(opts)
+ return result
def extdef_map_list_src_to_ast(extdef_src_list):
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D70693.230960.patch
Type: text/x-patch
Size: 3397 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20191125/4cc9c127/attachment.bin>
More information about the cfe-commits
mailing list