Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(999)

Unified Diff: build/toolchain/clang_static_analyzer_wrapper.py

Issue 2748793004: Add static analysis support to Win Clang builds (Closed)
Patch Set: Non-analysis fallback for Clang bugs Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | build/toolchain/win/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/toolchain/clang_static_analyzer_wrapper.py
diff --git a/build/toolchain/clang_static_analyzer_wrapper.py b/build/toolchain/clang_static_analyzer_wrapper.py
index 3a282ad48d5ae13feabc376a0525ed7f27419289..2a1ef16dee2710ac0eb1ff9dc0840a0ad6a2cca8 100755
--- a/build/toolchain/clang_static_analyzer_wrapper.py
+++ b/build/toolchain/clang_static_analyzer_wrapper.py
@@ -18,11 +18,11 @@ import wrapper_utils
# Flags used to enable analysis for Clang invocations.
analyzer_enable_flags = [
'--analyze',
- '-fdiagnostics-show-option',
]
# Flags used to configure the analyzer's behavior.
analyzer_option_flags = [
+ '-fdiagnostics-show-option',
'-analyzer-checker=cplusplus',
'-analyzer-opt-analyze-nested-blocks',
'-analyzer-eagerly-assume',
@@ -39,37 +39,39 @@ analyzer_option_flags = [
]
-def main():
- args = sys.argv[1:]
- assert args
+# Prepends every element of a list |args| with |token|.
+# e.g. ['-analyzer-foo', '-analyzer-bar'] => ['-Xanalyzer', '-analyzer-foo',
+# '-Xanalyzer', '-analyzer-bar']
+def interleave_args(args, token):
+ return list(sum(zip([token] * len(args), args), ()))
- # Build the object file and proceed with analysis if it is buildable.
- returncode, stderr = wrapper_utils.CaptureCommandStderr(
- wrapper_utils.CommandToRun(args))
- sys.stderr.write(stderr)
- if returncode != 0:
- return returncode
- # Now run the analyzer.
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--cl-mode',
+ help='Uses compiler arguments compatible with clang-cl.',
+ action='store_true')
brucedawson 2017/03/14 17:56:38 I'm not familiar enough with the available options
Kevin M 2017/03/14 19:11:03 My thinking was that the layperson would assume th
+ parser.add_argument('args', nargs=argparse.REMAINDER)
+ parsed_args = parser.parse_args()
- # Interleave 'analyzer_option_flags' flags w/'-Xanalyzer' so that Clang
- # passes them to the analysis tool.
- # e.g. ['-analyzer-foo', '-analyzer-bar'] => ['-Xanalyzer', '-analyzer-foo',
- # '-Xanalyzer', '-analyzer-bar']
- interleaved_analyzer_flags = list(sum(zip(
- ['-Xanalyzer'] * len(analyzer_option_flags),
- analyzer_option_flags), ()))
+ # Run the analyzer.
+ prefix = '-Xclang' if parsed_args.cl_mode else '-Xanalyzer'
+ cmd = parsed_args.args + analyzer_enable_flags + \
+ interleave_args(analyzer_option_flags, prefix)
returncode, stderr = wrapper_utils.CaptureCommandStderr(
- wrapper_utils.CommandToRun(args + analyzer_enable_flags +
- interleaved_analyzer_flags))
+ wrapper_utils.CommandToRun(cmd))
sys.stderr.write(stderr)
if returncode != 0:
sys.stderr.write(
"""WARNING! The Clang static analyzer exited with error code %d.
Please share the error details in crbug.com/695243 if this looks like
a new regression.\n""" % (returncode))
+ sys.stderr.write('Falling back to standard build without analysis...\n');
+ returncode, stderr = wrapper_utils.CaptureCommandStderr(
+ wrapper_utils.CommandToRun(parsed_args.args))
+ sys.stderr.write(stderr)
- return 0
+ return returncode
if __name__ == '__main__':
sys.exit(main())
« no previous file with comments | « no previous file | build/toolchain/win/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698