mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-04 16:26:46 +00:00
[scan-build-py] Set of small fixes
* Unhandled exceptions * Typos Differential Revision: https://reviews.llvm.org/D70693
This commit is contained in:
parent
a9f10ebffa
commit
8994d632c8
@ -33,7 +33,8 @@ from libscanbuild.intercept import capture
|
||||
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 @@ def run(opts):
|
||||
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 @@ def run(opts):
|
||||
|
||||
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,15 @@ def report_failure(opts):
|
||||
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 subprocess.CalledProcessError:
|
||||
pass
|
||||
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 +548,12 @@ def run_analyzer(opts, continuation=report_failure):
|
||||
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):
|
||||
|
@ -19,6 +19,11 @@ __all__ = ['get_version', 'get_arguments', 'get_checkers', 'is_ctu_capable',
|
||||
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 @@ def get_arguments(command, cwd):
|
||||
|
||||
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)
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user