aboutsummaryrefslogtreecommitdiff
path: root/clang_tidy
diff options
context:
space:
mode:
authorEmma Vukelj <emmavukelj@google.com>2019-05-30 14:54:14 -0700
committerEmma Vukelj <emmavukelj@google.com>2019-05-30 22:14:32 +0000
commit293372306c9c20593f89eba57411d6c5b51098ac (patch)
treeded19b9cf8dd2afc864cca6a3726d8ebedf7e95c /clang_tidy
parent11da7262159d4f6363f3a0b20b560f5e7204c0c9 (diff)
downloadtoolchain-utils-293372306c9c20593f89eba57411d6c5b51098ac.tar.gz
Clang-Tidy: refactoring clang_tidy_warn.py
Authors: Emma Vukelj, Elaina Guan This CL moves the warn_patterns dictionary and its dependencies into a seperate file which the original clang_tidy_warn.py imports. This is done for clarity and easier navigation of the original code. BUG=None TEST=No functionality was changed, original tests still work Change-Id: I248ed2e62cd5192d1d5a900d988424cf24b0047a Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/1637609 Reviewed-by: George Burgess <gbiv@chromium.org> Tested-by: Emma Vukelj <emmavukelj@google.com>
Diffstat (limited to 'clang_tidy')
-rwxr-xr-xclang_tidy/clang_tidy_warn.py2536
-rwxr-xr-xclang_tidy/clang_tidy_warn_patterns.py2576
2 files changed, 2578 insertions, 2534 deletions
diff --git a/clang_tidy/clang_tidy_warn.py b/clang_tidy/clang_tidy_warn.py
index ee04a43c..28e2b477 100755
--- a/clang_tidy/clang_tidy_warn.py
+++ b/clang_tidy/clang_tidy_warn.py
@@ -93,6 +93,8 @@ import re
import signal
import sys
+from clang_tidy_warn_patterns import warn_patterns, Severity
+
# TODO: move the parser code into a function
parser = argparse.ArgumentParser(description='Convert a build log into HTML')
parser.add_argument(
@@ -161,2540 +163,6 @@ class Severity(object):
headers = [a[2] for a in attributes]
-def tidy_warn_pattern(description, pattern):
- return {
- 'category': 'C/C++',
- 'severity': Severity.TIDY,
- 'description': 'clang-tidy ' + description,
- 'patterns': [r'.*: .+\[' + pattern + r'\]$']
- }
-
-
-def simple_tidy_warn_pattern(description):
- return tidy_warn_pattern(description, description)
-
-
-def group_tidy_warn_pattern(description):
- return tidy_warn_pattern(description, description + r'-.+')
-
-
-warn_patterns = [
- {
- 'category': 'C/C++',
- 'severity': Severity.ANALYZER,
- 'description': 'clang-analyzer Security warning',
- 'patterns': [r".*: warning: .+\[clang-analyzer-security.*\]"]
- },
- {
- 'category':
- 'make',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'make: overriding commands/ignoring old commands',
- 'patterns': [
- r".*: warning: overriding commands for target .+",
- r".*: warning: ignoring old commands for target .+"
- ]
- },
- {
- 'category': 'make',
- 'severity': Severity.HIGH,
- 'description': 'make: LOCAL_CLANG is false',
- 'patterns': [r".*: warning: LOCAL_CLANG is set to false"]
- },
- {
- 'category':
- 'make',
- 'severity':
- Severity.HIGH,
- 'description':
- 'SDK App using platform shared library',
- 'patterns': [
- r".*: warning: .+ \(.*app:sdk.*\) should not link to .+ "
- r"\(native:platform\)"
- ]
- },
- {
- 'category':
- 'make',
- 'severity':
- Severity.HIGH,
- 'description':
- 'System module linking to a vendor module',
- 'patterns': [
- r".*: warning: .+ \(.+\) should not link to .+ \(partition:.+\)"
- ]
- },
- {
- 'category': 'make',
- 'severity': Severity.MEDIUM,
- 'description': 'Invalid SDK/NDK linking',
- 'patterns': [r".*: warning: .+ \(.+\) should not link to .+ \(.+\)"]
- },
- {
- 'category': 'make',
- 'severity': Severity.MEDIUM,
- 'description': 'Duplicate header copy',
- 'patterns': [r".*: warning: Duplicate header copy: .+"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'option':
- '-Wimplicit-function-declaration',
- 'description':
- 'Implicit function declaration',
- 'patterns': [
- r".*: warning: implicit declaration of function .+",
- r".*: warning: implicitly declaring library function"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.SKIP,
- 'description': 'skip, conflicting types for ...',
- 'patterns': [r".*: warning: conflicting types for '.+'"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'option':
- '-Wtype-limits',
- 'description':
- 'Expression always evaluates to true or false',
- 'patterns': [
- r".*: warning: comparison is always .+ due to limited range of "
- r"data type",
- r".*: warning: comparison of unsigned .*expression .+ is always "
- r"true",
- r".*: warning: comparison of unsigned .*expression .+ is always "
- r"false"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'description':
- 'Potential leak of memory, bad free, use after free',
- 'patterns': [
- r".*: warning: Potential leak of memory",
- r".*: warning: Potential memory leak",
- r".*: warning: Memory allocated by alloca\(\) should not be "
- r"deallocated",
- r".*: warning: Memory allocated by .+ should be deallocated by "
- r".+ not .+",
- r".*: warning: 'delete' applied to a pointer that was allocated",
- r".*: warning: Use of memory after it is freed",
- r".*: warning: Argument to .+ is the address of .+ variable",
- r".*: warning: Argument to free\(\) is offset by .+ of memory "
- r"allocated by", r".*: warning: Attempt to .+ released memory"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'description':
- 'Use transient memory for control value',
- 'patterns': [
- r".*: warning: .+Using such transient memory for the control "
- r"value is .*dangerous."
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'description':
- 'Return address of stack memory',
- 'patterns': [
- r".*: warning: Address of stack memory .+ returned to caller",
- r".*: warning: Address of stack memory .+ will be a dangling "
- r"reference"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'description':
- 'Problem with vfork',
- 'patterns': [
- r".*: warning: This .+ is prohibited after a successful vfork",
- r".*: warning: Call to function '.+' is insecure "
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'option':
- 'infinite-recursion',
- 'description':
- 'Infinite recursion',
- 'patterns': [
- r".*: warning: all paths through this function will call itself"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'description':
- 'Potential buffer overflow',
- 'patterns': [
- r".*: warning: Size argument is greater than .+ the destination "
- r"buffer", r".*: warning: Potential buffer overflow.",
- r".*: warning: String copy function overflows destination buffer"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Incompatible pointer types',
- 'patterns': [
- r".*: warning: assignment from incompatible pointer type",
- r".*: warning: return from incompatible pointer type",
- r".*: warning: passing argument [0-9]+ of '.*' from incompatible "
- r"pointer type",
- r".*: warning: initialization from incompatible pointer type"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'option':
- '-fno-builtin',
- 'description':
- 'Incompatible declaration of built in function',
- 'patterns': [
- r".*: warning: incompatible implicit declaration of built-in "
- r"function .+"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'option':
- '-Wincompatible-library-redeclaration',
- 'description':
- 'Incompatible redeclaration of library function',
- 'patterns': [
- r".*: warning: incompatible redeclaration of library function .+"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'description':
- 'Null passed as non-null argument',
- 'patterns': [
- r".*: warning: Null passed to a callee that requires a non-null"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wunused-parameter',
- 'description': 'Unused parameter',
- 'patterns': [r".*: warning: unused parameter '.*'"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wunused',
- 'description':
- 'Unused function, variable, label, comparison, etc.',
- 'patterns': [
- r".*: warning: '.+' defined but not used",
- r".*: warning: unused function '.+'",
- r".*: warning: unused label '.+'",
- r".*: warning: relational comparison result unused",
- r".*: warning: lambda capture .* is not used",
- r".*: warning: private field '.+' is not used",
- r".*: warning: unused variable '.+'"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wunused-value',
- 'description':
- 'Statement with no effect or result unused',
- 'patterns': [
- r".*: warning: statement with no effect",
- r".*: warning: expression result unused"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wunused-result',
- 'description':
- 'Ignoreing return value of function',
- 'patterns': [
- r".*: warning: ignoring return value of function .+Wunused-result"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wmissing-field-initializers',
- 'description': 'Missing initializer',
- 'patterns': [r".*: warning: missing initializer"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wdelete-non-virtual-dtor',
- 'description':
- 'Need virtual destructor',
- 'patterns': [
- r".*: warning: delete called .* has virtual functions but "
- r"non-virtual destructor"
- ]
- },
- {
- 'category': 'cont.',
- 'severity': Severity.SKIP,
- 'description': 'skip, near initialization for ...',
- 'patterns': [r".*: warning: \(near initialization for '.+'\)"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wdate-time',
- 'description':
- 'Expansion of data or time macro',
- 'patterns': [
- r".*: warning: expansion of date or time macro is not reproducible"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wformat',
- 'description':
- 'Format string does not match arguments',
- 'patterns': [
- r".*: warning: format '.+' expects type '.+', but argument "
- r"[0-9]+ has type '.+'",
- r".*: warning: more '%' conversions than data arguments",
- r".*: warning: data argument not used by format string",
- r".*: warning: incomplete format specifier",
- r".*: warning: unknown conversion type .* in format",
- r".*: warning: format .+ expects .+ but argument .+Wformat=",
- r".*: warning: field precision should have .+ but argument has "
- r".+Wformat",
- r".*: warning: format specifies type .+ but the argument has "
- r".*type .+Wformat"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wformat-extra-args',
- 'description': 'Too many arguments for format string',
- 'patterns': [r".*: warning: too many arguments for format"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'Too many arguments in call',
- 'patterns': [r".*: warning: too many arguments in call to "]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wformat-invalid-specifier',
- 'description':
- 'Invalid format specifier',
- 'patterns': [
- r".*: warning: invalid .+ specifier '.+'.+format-invalid-specifier"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wsign-compare',
- 'description':
- 'Comparison between signed and unsigned',
- 'patterns': [
- r".*: warning: comparison between signed and unsigned",
- r".*: warning: comparison of promoted \~unsigned with unsigned",
- r".*: warning: signed and unsigned type in conditional expression"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Comparison between enum and non-enum',
- 'patterns': [
- r".*: warning: enumeral and non-enumeral type in conditional "
- r"expression"
- ]
- },
- {
- 'category':
- 'libpng',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'libpng: zero area',
- 'patterns': [
- r".*libpng warning: Ignoring attempt to set cHRM RGB triangle "
- r"with zero area"
- ]
- },
- {
- 'category': 'aapt',
- 'severity': Severity.MEDIUM,
- 'description': 'aapt: no comment for public symbol',
- 'patterns': [r".*: warning: No comment for public symbol .+"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wmissing-braces',
- 'description': 'Missing braces around initializer',
- 'patterns': [r".*: warning: missing braces around initializer.*"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.HARMLESS,
- 'description': 'No newline at end of file',
- 'patterns': [r".*: warning: no newline at end of file"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.HARMLESS,
- 'description': 'Missing space after macro name',
- 'patterns': [r".*: warning: missing whitespace after the macro name"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.LOW,
- 'option':
- '-Wcast-align',
- 'description':
- 'Cast increases required alignment',
- 'patterns': [
- r".*: warning: cast from .* to .* increases required alignment .*"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wcast-qual',
- 'description':
- 'Qualifier discarded',
- 'patterns': [
- r".*: warning: passing argument [0-9]+ of '.+' discards "
- r"qualifiers from pointer target type",
- r".*: warning: assignment discards qualifiers from pointer "
- r"target type",
- r".*: warning: passing .+ to parameter of type .+ discards "
- r"qualifiers",
- r".*: warning: assigning to .+ from .+ discards qualifiers",
- r".*: warning: initializing .+ discards qualifiers "
- r".+types-discards-qualifiers",
- r".*: warning: return discards qualifiers from pointer target type"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wunknown-attributes',
- 'description': 'Unknown attribute',
- 'patterns': [r".*: warning: unknown attribute '.+'"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wignored-attributes',
- 'description':
- 'Attribute ignored',
- 'patterns': [
- r".*: warning: '_*packed_*' attribute ignored",
- r".*: warning: attribute declaration must precede definition "
- r".+ignored-attributes"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wvisibility',
- 'description':
- 'Visibility problem',
- 'patterns': [
- r".*: warning: declaration of '.+' will not be visible outside "
- r"of this function"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wattributes',
- 'description':
- 'Visibility mismatch',
- 'patterns': [
- r".*: warning: '.+' declared with greater visibility than the "
- r"type of its field '.+'"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'Shift count greater than width of type',
- 'patterns': [r".*: warning: (left|right) shift count >= width of type"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wextern-initializer',
- 'description':
- 'extern &lt;foo&gt; is initialized',
- 'patterns': [
- r".*: warning: '.+' initialized and declared 'extern'",
- r".*: warning: 'extern' variable has an initializer"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wold-style-declaration',
- 'description':
- 'Old style declaration',
- 'patterns': [
- r".*: warning: 'static' is not at beginning of declaration"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wreturn-type',
- 'description': 'Missing return value',
- 'patterns': [r".*: warning: control reaches end of non-void function"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wimplicit-int',
- 'description':
- 'Implicit int type',
- 'patterns': [
- r".*: warning: type specifier missing, defaults to 'int'",
- r".*: warning: type defaults to 'int' in declaration of '.+'"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wmain-return-type',
- 'description': 'Main function should return int',
- 'patterns': [r".*: warning: return type of 'main' is not 'int'"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wuninitialized',
- 'description':
- 'Variable may be used uninitialized',
- 'patterns': [
- r".*: warning: '.+' may be used uninitialized in this function"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'option':
- '-Wuninitialized',
- 'description':
- 'Variable is used uninitialized',
- 'patterns': [
- r".*: warning: '.+' is used uninitialized in this function",
- r".*: warning: variable '.+' is uninitialized when used here"
- ]
- },
- {
- 'category':
- 'ld',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-fshort-enums',
- 'description':
- 'ld: possible enum size mismatch',
- 'patterns': [
- r".*: warning: .* uses variable-size enums yet the output is to "
- r"use 32-bit enums; use of enum values across objects may fail"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wpointer-sign',
- 'description':
- 'Pointer targets differ in signedness',
- 'patterns': [
- r".*: warning: pointer targets in initialization differ in "
- r"signedness",
- r".*: warning: pointer targets in assignment differ in signedness",
- r".*: warning: pointer targets in return differ in signedness",
- r".*: warning: pointer targets in passing argument [0-9]+ of '.+' "
- r"differ in signedness"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wstrict-overflow',
- 'description':
- 'Assuming overflow does not occur',
- 'patterns': [
- r".*: warning: assuming signed overflow does not occur when "
- r"assuming that .* is always (true|false)"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wempty-body',
- 'description':
- 'Suggest adding braces around empty body',
- 'patterns': [
- r".*: warning: suggest braces around empty body in an 'if' "
- r"statement", r".*: warning: empty body in an if-statement",
- r".*: warning: suggest braces around empty body in an 'else' "
- r"statement", r".*: warning: empty body in an else-statement"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wparentheses',
- 'description':
- 'Suggest adding parentheses',
- 'patterns': [
- r".*: warning: suggest explicit braces to avoid ambiguous 'else'",
- r".*: warning: suggest parentheses around arithmetic in operand "
- r"of '.+'",
- r".*: warning: suggest parentheses around comparison in operand "
- r"of '.+'",
- r".*: warning: logical not is only applied to the left hand "
- r"side of this comparison",
- r".*: warning: using the result of an assignment as a condition "
- r"without parentheses",
- r".*: warning: .+ has lower precedence than .+ be evaluated "
- r"first .+Wparentheses",
- r".*: warning: suggest parentheses around '.+?' .+ '.+?'",
- r".*: warning: suggest parentheses around assignment used as "
- r"truth value"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Static variable used in non-static inline function',
- 'patterns': [
- r".*: warning: '.+' is static but used in inline function '.+' "
- r"which is not static"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wimplicit int',
- 'description':
- 'No type or storage class (will default to int)',
- 'patterns': [
- r".*: warning: data definition has no type or storage class"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Null pointer',
- 'patterns': [
- r".*: warning: Dereference of null pointer",
- r".*: warning: Called .+ pointer is null",
- r".*: warning: Forming reference to null pointer",
- r".*: warning: Returning null reference",
- r".*: warning: Null pointer passed as an argument to a 'nonnull' "
- r"parameter",
- r".*: warning: .+ results in a null pointer dereference",
- r".*: warning: Access to .+ results in a dereference of a null "
- r"pointer", r".*: warning: Null pointer argument in"
- ]
- },
- {
- 'category':
- 'cont.',
- 'severity':
- Severity.SKIP,
- 'description':
- 'skip, parameter name (without types) in function declaration',
- 'patterns': [
- r".*: warning: parameter names \(without types\) in function "
- r"declaration"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wstrict-aliasing',
- 'description':
- 'Dereferencing &lt;foo&gt; breaks strict aliasing rules',
- 'patterns': [
- r".*: warning: dereferencing .* break strict-aliasing rules"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wpointer-to-int-cast',
- 'description':
- 'Cast from pointer to integer of different size',
- 'patterns': [
- r".*: warning: cast from pointer to integer of different size",
- r".*: warning: initialization makes pointer from integer without "
- r"a cast"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wint-to-pointer-cast',
- 'description':
- 'Cast to pointer from integer of different size',
- 'patterns': [
- r".*: warning: cast to pointer from integer of different size"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'Symbol redefined',
- 'patterns': [r".*: warning: "
- ".+"
- " redefined"]
- },
- {
- 'category':
- 'cont.',
- 'severity':
- Severity.SKIP,
- 'description':
- 'skip, ... location of the previous definition',
- 'patterns': [
- r".*: warning: this is the location of the previous definition"
- ]
- },
- {
- 'category':
- 'ld',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'ld: type and size of dynamic symbol are not defined',
- 'patterns': [
- r".*: warning: type and size of dynamic symbol `.+' are not "
- r"defined"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Pointer from integer without cast',
- 'patterns': [
- r".*: warning: assignment makes pointer from integer without a "
- r"cast"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Pointer from integer without cast',
- 'patterns': [
- r".*: warning: passing argument [0-9]+ of '.+' makes pointer from "
- r"integer without a cast"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Integer from pointer without cast',
- 'patterns': [
- r".*: warning: assignment makes integer from pointer without a "
- r"cast"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Integer from pointer without cast',
- 'patterns': [
- r".*: warning: passing argument [0-9]+ of '.+' makes integer from "
- r"pointer without a cast"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Integer from pointer without cast',
- 'patterns': [
- r".*: warning: return makes integer from pointer without a cast"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wunknown-pragmas',
- 'description': 'Ignoring pragma',
- 'patterns': [r".*: warning: ignoring #pragma .+"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-W#pragma-messages',
- 'description': 'Pragma warning messages',
- 'patterns': [r".*: warning: .+W#pragma-messages"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wclobbered',
- 'description':
- 'Variable might be clobbered by longjmp or vfork',
- 'patterns': [
- r".*: warning: variable '.+' might be clobbered by 'longjmp' or "
- r"'vfork'"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wclobbered',
- 'description':
- 'Argument might be clobbered by longjmp or vfork',
- 'patterns': [
- r".*: warning: argument '.+' might be clobbered by 'longjmp' or "
- r"'vfork'"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wredundant-decls',
- 'description': 'Redundant declaration',
- 'patterns': [r".*: warning: redundant redeclaration of '.+'"]
- },
- {
- 'category': 'cont.',
- 'severity': Severity.SKIP,
- 'description': 'skip, previous declaration ... was here',
- 'patterns': [r".*: warning: previous declaration of '.+' was here"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wswitch-enum',
- 'description':
- 'Enum value not handled in switch',
- 'patterns': [
- r".*: warning: .*enumeration value.* not handled in "
- r"switch.+Wswitch"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wuser-defined-warnings',
- 'description': 'User defined warnings',
- 'patterns': [r".*: warning: .* \[-Wuser-defined-warnings\]$"]
- },
- {
- 'category':
- 'aapt',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'aapt: No default translation',
- 'patterns': [
- r".*: warning: string '.+' has no default translation in .*"
- ]
- },
- {
- 'category':
- 'aapt',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'aapt: Missing default or required localization',
- 'patterns': [
- r".*: warning: \*\*\*\* string '.+' has no default or required "
- r"localization for '.+' in .+"
- ]
- },
- {
- 'category':
- 'aapt',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'aapt: String marked untranslatable, but translation exists',
- 'patterns': [
- r".*: warning: string '.+' in .* marked untranslatable but exists "
- r"in locale '??_??'"
- ]
- },
- {
- 'category': 'aapt',
- 'severity': Severity.MEDIUM,
- 'description': 'aapt: empty span in string',
- 'patterns': [r".*: warning: empty '.+' span found in text '.+"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'Taking address of temporary',
- 'patterns': [r".*: warning: taking address of temporary"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'Taking address of packed member',
- 'patterns': [r".*: warning: taking address of packed member"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'Possible broken line continuation',
- 'patterns': [r".*: warning: backslash and newline separated by space"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wundefined-var-template',
- 'description':
- 'Undefined variable template',
- 'patterns': [
- r".*: warning: instantiation of variable .* no definition is "
- r"available"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wundefined-inline',
- 'description': 'Inline function is not defined',
- 'patterns': [r".*: warning: inline function '.*' is not defined"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Warray-bounds',
- 'description':
- 'Array subscript out of bounds',
- 'patterns': [
- r".*: warning: array subscript is above array bounds",
- r".*: warning: Array subscript is undefined",
- r".*: warning: array subscript is below array bounds"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'Excess elements in initializer',
- 'patterns': [r".*: warning: excess elements in .+ initializer"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Decimal constant is unsigned only in ISO C90',
- 'patterns': [
- r".*: warning: this decimal constant is unsigned only in ISO C90"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wmain',
- 'description': 'main is usually a function',
- 'patterns': [r".*: warning: 'main' is usually a function"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'Typedef ignored',
- 'patterns': [r".*: warning: 'typedef' was ignored in this declaration"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'option':
- '-Waddress',
- 'description':
- 'Address always evaluates to true',
- 'patterns': [
- r".*: warning: the address of '.+' will always evaluate as 'true'"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.FIXMENOW,
- 'description': 'Freeing a non-heap object',
- 'patterns': [r".*: warning: attempt to free a non-heap object '.+'"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wchar-subscripts',
- 'description':
- 'Array subscript has type char',
- 'patterns': [
- r".*: warning: array subscript .+ type 'char'.+Wchar-subscripts"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Constant too large for type',
- 'patterns': [
- r".*: warning: integer constant is too large for '.+' type"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Woverflow',
- 'description':
- 'Constant too large for type, truncated',
- 'patterns': [
- r".*: warning: large integer implicitly truncated to unsigned type"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Winteger-overflow',
- 'description':
- 'Overflow in expression',
- 'patterns': [
- r".*: warning: overflow in expression; .*Winteger-overflow"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Woverflow',
- 'description': 'Overflow in implicit constant conversion',
- 'patterns': [r".*: warning: overflow in implicit constant conversion"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Declaration does not declare anything',
- 'patterns': [
- r".*: warning: declaration 'class .+' does not declare anything"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wreorder',
- 'description':
- 'Initialization order will be different',
- 'patterns': [
- r".*: warning: '.+' will be initialized after",
- r".*: warning: field .+ will be initialized after .+Wreorder"
- ]
- },
- {
- 'category': 'cont.',
- 'severity': Severity.SKIP,
- 'description': 'skip, ....',
- 'patterns': [r".*: warning: '.+'"]
- },
- {
- 'category': 'cont.',
- 'severity': Severity.SKIP,
- 'description': 'skip, base ...',
- 'patterns': [r".*: warning: base '.+'"]
- },
- {
- 'category': 'cont.',
- 'severity': Severity.SKIP,
- 'description': 'skip, when initialized here',
- 'patterns': [r".*: warning: when initialized here"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wmissing-parameter-type',
- 'description': 'Parameter type not specified',
- 'patterns': [r".*: warning: type of '.+' defaults to 'int'"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wmissing-declarations',
- 'description': 'Missing declarations',
- 'patterns': [r".*: warning: declaration does not declare anything"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wmissing-noreturn',
- 'description':
- 'Missing noreturn',
- 'patterns': [
- r".*: warning: function '.*' could be declared with attribute "
- r"'noreturn'"
- ]
- },
- # pylint:disable=anomalous-backslash-in-string
- # TODO(chh): fix the backslash pylint warning.
- {
- 'category':
- 'gcc',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Invalid option for C file',
- 'patterns': [
- r".*: warning: command line option "
- ".+"
- " is valid for C\+\+\/ObjC\+\+ but not for C"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'User warning',
- 'patterns': [r".*: warning: #warning "
- ".+"
- ""]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wvexing-parse',
- 'description':
- 'Vexing parsing problem',
- 'patterns': [
- r".*: warning: empty parentheses interpreted as a function "
- r"declaration"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wextra',
- 'description': 'Dereferencing void*',
- 'patterns': [r".*: warning: dereferencing 'void \*' pointer"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Comparison of pointer and integer',
- 'patterns': [
- r".*: warning: ordered comparison of pointer with integer zero",
- r".*: warning: .*comparison between pointer and integer"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Use of error-prone unary operator',
- 'patterns': [
- r".*: warning: use of unary operator that may be intended as "
- r"compound assignment"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wwrite-strings',
- 'description':
- 'Conversion of string constant to non-const char*',
- 'patterns': [
- r".*: warning: deprecated conversion from string constant to '.+'"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wstrict-prototypes',
- 'description': 'Function declaration isn'
- 't a prototype',
- 'patterns': [r".*: warning: function declaration isn't a prototype"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wignored-qualifiers',
- 'description':
- 'Type qualifiers ignored on function return value',
- 'patterns': [
- r".*: warning: type qualifiers ignored on function return type",
- r".*: warning: .+ type qualifier .+ has no effect "
- r".+Wignored-qualifiers"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description':
- '&lt;foo&gt; declared inside parameter list, scope limited to '
- 'this definition',
- 'patterns': [r".*: warning: '.+' declared inside parameter list"]
- },
- {
- 'category':
- 'cont.',
- 'severity':
- Severity.SKIP,
- 'description':
- 'skip, its scope is only this ...',
- 'patterns': [
- r".*: warning: its scope is only this definition or declaration, "
- r"which is probably not what you want"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.LOW,
- 'option': '-Wcomment',
- 'description': 'Line continuation inside comment',
- 'patterns': [r".*: warning: multi-line comment"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.LOW,
- 'option': '-Wcomment',
- 'description': 'Comment inside comment',
- 'patterns': [r".*: warning: "
- ".+"
- " within comment"]
- },
- # Warning "value stored is never read" could be from clang-tidy or clang
- # static analyzer.
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.ANALYZER,
- 'description':
- 'clang-analyzer Value stored is never read',
- 'patterns': [
- r".*: warning: Value stored to .+ is never "
- r"read.*clang-analyzer-deadcode.DeadStores"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.LOW,
- 'description': 'Value stored is never read',
- 'patterns': [r".*: warning: Value stored to .+ is never read"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.LOW,
- 'option': '-Wdeprecated-declarations',
- 'description': 'Deprecated declarations',
- 'patterns': [r".*: warning: .+ is deprecated.+deprecated-declarations"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.LOW,
- 'option':
- '-Wdeprecated-register',
- 'description':
- 'Deprecated register',
- 'patterns': [
- r".*: warning: 'register' storage class specifier is deprecated"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.LOW,
- 'option':
- '-Wpointer-sign',
- 'description':
- 'Converts between pointers to integer types with different sign',
- 'patterns': [
- r".*: warning: .+ converts between pointers to integer types "
- r"with different sign"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.HARMLESS,
- 'description': 'Extra tokens after #endif',
- 'patterns': [r".*: warning: extra tokens at end of #endif directive"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wenum-compare',
- 'description':
- 'Comparison between different enums',
- 'patterns': [
- r".*: warning: comparison between '.+' and '.+'.+Wenum-compare"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wconversion',
- 'description':
- 'Conversion may change value',
- 'patterns': [
- r".*: warning: converting negative value '.+' to '.+'",
- r".*: warning: conversion to '.+' .+ may (alter|change)"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wconversion-null',
- 'description':
- 'Converting to non-pointer type from NULL',
- 'patterns': [
- r".*: warning: converting to non-pointer type '.+' from NULL"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wsign-conversion',
- 'description': 'Implicit sign conversion',
- 'patterns': [r".*: warning: implicit conversion changes signedness"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wnull-conversion',
- 'description':
- 'Converting NULL to non-pointer type',
- 'patterns': [
- r".*: warning: implicit conversion of NULL constant to '.+'"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wnon-literal-null-conversion',
- 'description':
- 'Zero used as null pointer',
- 'patterns': [
- r".*: warning: expression .* zero treated as a null pointer "
- r"constant"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Implicit conversion changes value',
- 'patterns': [
- r".*: warning: implicit conversion .* changes value from .* to "
- r".*-conversion"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Passing NULL as non-pointer argument',
- 'patterns': [
- r".*: warning: passing NULL to non-pointer argument [0-9]+ of '.+'"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wctor-dtor-privacy',
- 'description':
- 'Class seems unusable because of private ctor/dtor',
- 'patterns': [
- r".*: warning: all member functions in class '.+' are private"
- ]
- },
- # skip this next one, because it only points out some RefBase-based classes
- # where having a private destructor is perfectly fine
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.SKIP,
- 'option':
- '-Wctor-dtor-privacy',
- 'description':
- 'Class seems unusable because of private ctor/dtor',
- 'patterns': [
- r".*: warning: 'class .+' only defines a private destructor and "
- r"has no friends"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wctor-dtor-privacy',
- 'description':
- 'Class seems unusable because of private ctor/dtor',
- 'patterns': [
- r".*: warning: 'class .+' only defines private constructors and "
- r"has no friends"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wgnu-static-float-init',
- 'description':
- 'In-class initializer for static const float/double',
- 'patterns': [
- r".*: warning: in-class initializer for static data member of "
- r".+const (float|double)"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wpointer-arith',
- 'description':
- 'void* used in arithmetic',
- 'patterns': [
- r".*: warning: pointer of type 'void \*' used in "
- r"(arithmetic|subtraction)",
- r".*: warning: arithmetic on .+ to void is a GNU "
- r"extension.*Wpointer-arith",
- r".*: warning: wrong type argument to increment"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wsign-promo',
- 'description':
- 'Overload resolution chose to promote from unsigned or enum to '
- 'signed type',
- 'patterns': [
- r".*: warning: passing '.+' chooses '.+' over '.+'.*Wsign-promo"
- ]
- },
- {
- 'category': 'cont.',
- 'severity': Severity.SKIP,
- 'description': 'skip, in call to ...',
- 'patterns': [r".*: warning: in call to '.+'"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HIGH,
- 'option':
- '-Wextra',
- 'description':
- 'Base should be explicitly initialized in copy constructor',
- 'patterns': [
- r".*: warning: base class '.+' should be explicitly initialized "
- r"in the copy constructor"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'VLA has zero or negative size',
- 'patterns': [
- r".*: warning: Declared variable-length array \(VLA\) has .+ size"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Return value from void function',
- 'patterns': [
- r".*: warning: 'return' with a value, in function returning void"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': 'multichar',
- 'description': 'Multi-character character constant',
- 'patterns': [r".*: warning: multi-character character constant"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- 'writable-strings',
- 'description':
- 'Conversion from string literal to char*',
- 'patterns': [
- r".*: warning: .+ does not allow conversion from string literal "
- r"to 'char \*'"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.LOW,
- 'option': '-Wextra-semi',
- 'description': 'Extra \';\'',
- 'patterns': [r".*: warning: extra ';' .+extra-semi"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.LOW,
- 'description':
- 'Useless specifier',
- 'patterns': [
- r".*: warning: useless storage class specifier in empty "
- r"declaration"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.LOW,
- 'option': '-Wduplicate-decl-specifier',
- 'description': 'Duplicate declaration specifier',
- 'patterns': [r".*: warning: duplicate '.+' declaration specifier"]
- },
- {
- 'category': 'logtags',
- 'severity': Severity.LOW,
- 'description': 'Duplicate logtag',
- 'patterns': [r".*: warning: tag \".+\" \(.+\) duplicated in .+"]
- },
- {
- 'category':
- 'logtags',
- 'severity':
- Severity.LOW,
- 'option':
- 'typedef-redefinition',
- 'description':
- 'Typedef redefinition',
- 'patterns': [
- r".*: warning: redefinition of typedef '.+' is a C11 feature"
- ]
- },
- {
- 'category':
- 'logtags',
- 'severity':
- Severity.LOW,
- 'option':
- 'gnu-designator',
- 'description':
- 'GNU old-style field designator',
- 'patterns': [
- r".*: warning: use of GNU old-style field designator extension"
- ]
- },
- {
- 'category': 'logtags',
- 'severity': Severity.LOW,
- 'option': 'missing-field-initializers',
- 'description': 'Missing field initializers',
- 'patterns': [r".*: warning: missing field '.+' initializer"]
- },
- {
- 'category':
- 'logtags',
- 'severity':
- Severity.LOW,
- 'option':
- 'missing-braces',
- 'description':
- 'Missing braces',
- 'patterns': [
- r".*: warning: suggest braces around initialization of",
- r".*: warning: too many braces around scalar initializer "
- r".+Wmany-braces-around-scalar-init",
- r".*: warning: braces around scalar initializer"
- ]
- },
- {
- 'category':
- 'logtags',
- 'severity':
- Severity.LOW,
- 'option':
- 'sign-compare',
- 'description':
- 'Comparison of integers of different signs',
- 'patterns': [
- r".*: warning: comparison of integers of different "
- r"signs.+sign-compare"
- ]
- },
- {
- 'category': 'logtags',
- 'severity': Severity.LOW,
- 'option': 'dangling-else',
- 'description': 'Add braces to avoid dangling else',
- 'patterns': [
- r".*: warning: add explicit braces to avoid dangling else"
- ]
- },
- {
- 'category':
- 'logtags',
- 'severity':
- Severity.LOW,
- 'option':
- 'initializer-overrides',
- 'description':
- 'Initializer overrides prior initialization',
- 'patterns': [
- r".*: warning: initializer overrides prior initialization of this "
- r"subobject"
- ]
- },
- {
- 'category': 'logtags',
- 'severity': Severity.LOW,
- 'option': 'self-assign',
- 'description': 'Assigning value to self',
- 'patterns': [
- r".*: warning: explicitly assigning value of .+ to itself"
- ]
- },
- {
- 'category':
- 'logtags',
- 'severity':
- Severity.LOW,
- 'option':
- 'gnu-variable-sized-type-not-at-end',
- 'description':
- 'GNU extension, variable sized type not at end',
- 'patterns': [
- r".*: warning: field '.+' with variable sized type '.+' not at "
- r"the end of a struct or class"
- ]
- },
- {
- 'category':
- 'logtags',
- 'severity':
- Severity.LOW,
- 'option':
- 'tautological-constant-out-of-range-compare',
- 'description':
- 'Comparison of constant is always false/true',
- 'patterns': [
- r".*: comparison of .+ is always "
- r".+Wtautological-constant-out-of-range-compare"
- ]
- },
- {
- 'category': 'logtags',
- 'severity': Severity.LOW,
- 'option': 'overloaded-virtual',
- 'description': 'Hides overloaded virtual function',
- 'patterns': [r".*: '.+' hides overloaded virtual function"]
- },
- {
- 'category':
- 'logtags',
- 'severity':
- Severity.LOW,
- 'option':
- 'incompatible-pointer-types',
- 'description':
- 'Incompatible pointer types',
- 'patterns': [
- r".*: warning: incompatible pointer types "
- r".+Wincompatible-pointer-types"
- ]
- },
- {
- 'category':
- 'logtags',
- 'severity':
- Severity.LOW,
- 'option':
- 'asm-operand-widths',
- 'description':
- 'ASM value size does not match register size',
- 'patterns': [
- r".*: warning: value size does not match register size "
- r"specified by the constraint and modifier"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.LOW,
- 'option': 'tautological-compare',
- 'description': 'Comparison of self is always false',
- 'patterns': [r".*: self-comparison always evaluates to false"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.LOW,
- 'option': 'constant-logical-operand',
- 'description': 'Logical op with constant operand',
- 'patterns': [r".*: use of logical '.+' with constant operand"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.LOW,
- 'option':
- 'literal-suffix',
- 'description':
- 'Needs a space between literal and string macro',
- 'patterns': [
- r".*: warning: invalid suffix on literal.+ requires a space "
- r".+Wliteral-suffix"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.LOW,
- 'option': '#warnings',
- 'description': 'Warnings from #warning',
- 'patterns': [r".*: warning: .+-W#warnings"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.LOW,
- 'option':
- 'absolute-value',
- 'description':
- 'Using float/int absolute value function with int/float argument',
- 'patterns': [
- r".*: warning: using .+ absolute value function .+ when argument "
- r"is .+ type .+Wabsolute-value",
- r".*: warning: absolute value function '.+' given .+ which may "
- r"cause truncation .+Wabsolute-value"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.LOW,
- 'option':
- '-Wc++11-extensions',
- 'description':
- 'Using C++11 extensions',
- 'patterns': [
- r".*: warning: 'auto' type specifier is a C\+\+11 extension"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.LOW,
- 'description':
- 'Refers to implicitly defined namespace',
- 'patterns': [
- r".*: warning: using directive refers to implicitly-defined "
- r"namespace .+"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.LOW,
- 'option': '-Winvalid-pp-token',
- 'description': 'Invalid pp token',
- 'patterns': [r".*: warning: missing .+Winvalid-pp-token"]
- },
- {
- 'category':
- 'link',
- 'severity':
- Severity.LOW,
- 'description':
- 'need glibc to link',
- 'patterns': [
- r".*: warning: .* requires at runtime .* glibc .* for linking"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Operator new returns NULL',
- 'patterns': [
- r".*: warning: 'operator new' must not return NULL unless it is "
- r"declared 'throw\(\)' .+"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wnull-arithmetic',
- 'description':
- 'NULL used in arithmetic',
- 'patterns': [
- r".*: warning: NULL used in arithmetic",
- r".*: warning: comparison between NULL and non-pointer"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- 'header-guard',
- 'description':
- 'Misspelled header guard',
- 'patterns': [
- r".*: warning: '.+' is used as a header guard .+ followed by .+ "
- r"different macro"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': 'empty-body',
- 'description': 'Empty loop body',
- 'patterns': [r".*: warning: .+ loop has empty body"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- 'enum-conversion',
- 'description':
- 'Implicit conversion from enumeration type',
- 'patterns': [
- r".*: warning: implicit conversion from enumeration type '.+'"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': 'switch',
- 'description': 'case value not in enumerated type',
- 'patterns': [r".*: warning: case value not in enumerated type '.+'"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Undefined result',
- 'patterns': [
- r".*: warning: The result of .+ is undefined",
- r".*: warning: passing an object that .+ has undefined behavior "
- r"\[-Wvarargs\]",
- r".*: warning: 'this' pointer cannot be null in well-defined "
- r"C\+\+ code;",
- r".*: warning: shifting a negative signed value is undefined"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'Division by zero',
- 'patterns': [r".*: warning: Division by zero"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'Use of deprecated method',
- 'patterns': [r".*: warning: '.+' is deprecated .+"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Use of garbage or uninitialized value',
- 'patterns': [
- r".*: warning: .+ is a garbage value",
- r".*: warning: Function call argument is an uninitialized value",
- r".*: warning: Undefined or garbage value returned to caller",
- r".*: warning: Called .+ pointer is.+uninitialized",
- # note that the below matches a typo in compiler message
- r".*: warning: Called .+ pointer is.+uninitalized",
- r".*: warning: Use of zero-allocated memory",
- r".*: warning: Dereference of undefined pointer value",
- r".*: warning: Passed-by-value .+ contains uninitialized data",
- r".*: warning: Branch condition evaluates to a garbage value",
- r".*: warning: The .+ of .+ is an uninitialized value.",
- r".*: warning: .+ is used uninitialized whenever "
- r".+sometimes-uninitialized",
- r".*: warning: Assigned value is garbage or undefined"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Result of malloc type incompatible with sizeof operand type',
- 'patterns': [
- r".*: warning: Result of '.+' is converted to .+ incompatible "
- r"with sizeof operand type"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wsizeof-array-argument',
- 'description':
- 'Sizeof on array argument',
- 'patterns': [
- r".*: warning: sizeof on array function parameter will return"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'option': '-Wsizeof-pointer-memacces',
- 'description': 'Bad argument size of memory access functions',
- 'patterns': [r".*: warning: .+\[-Wsizeof-pointer-memaccess\]"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'Return value not checked',
- 'patterns': [r".*: warning: The return value from .+ is not checked"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'Possible heap pollution',
- 'patterns': [r".*: warning: .*Possible heap pollution from .+ type .+"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Allocation size of 0 byte',
- 'patterns': [
- r".*: warning: Call to .+ has an allocation size of 0 byte"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'description':
- 'Result of malloc type incompatible with sizeof operand type',
- 'patterns': [
- r".*: warning: Result of '.+' is converted to .+ incompatible "
- r"with sizeof operand type"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wfor-loop-analysis',
- 'description':
- 'Variable used in loop condition not modified in loop body',
- 'patterns': [
- r".*: warning: variable '.+' used in loop "
- r"condition.*Wfor-loop-analysis"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.MEDIUM,
- 'description': 'Closing a previously closed file',
- 'patterns': [r".*: warning: Closing a previously closed file"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wunnamed-type-template-args',
- 'description':
- 'Unnamed template type argument',
- 'patterns': [
- r".*: warning: template argument.+Wunnamed-type-template-args"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.MEDIUM,
- 'option':
- '-Wimplicit-fallthrough',
- 'description':
- 'Unannotated fall-through between switch labels',
- 'patterns': [
- r".*: warning: unannotated fall-through between switch "
- r"labels.+Wimplicit-fallthrough"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HARMLESS,
- 'description':
- 'Discarded qualifier from pointer target type',
- 'patterns': [
- r".*: warning: .+ discards '.+' qualifier from pointer target type"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HARMLESS,
- 'description':
- 'Use snprintf instead of sprintf',
- 'patterns': [
- r".*: warning: .*sprintf is often misused; please use snprintf"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.HARMLESS,
- 'description': 'Unsupported optimizaton flag',
- 'patterns': [r".*: warning: optimization flag '.+' is not supported"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HARMLESS,
- 'description':
- 'Extra or missing parentheses',
- 'patterns': [
- r".*: warning: equality comparison with extraneous parentheses",
- r".*: warning: .+ within .+Wlogical-op-parentheses"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.HARMLESS,
- 'option':
- 'mismatched-tags',
- 'description':
- 'Mismatched class vs struct tags',
- 'patterns': [
- r".*: warning: '.+' defined as a .+ here but previously declared "
- r"as a .+mismatched-tags",
- r".*: warning: .+ was previously declared as a .+mismatched-tags"
- ]
- },
- {
- 'category': 'FindEmulator',
- 'severity': Severity.HARMLESS,
- 'description': 'FindEmulator: No such file or directory',
- 'patterns': [
- r".*: warning: FindEmulator: .* No such file or directory"
- ]
- },
- {
- 'category':
- 'google_tests',
- 'severity':
- Severity.HARMLESS,
- 'description':
- 'google_tests: unknown installed file',
- 'patterns': [
- r".*: warning: .*_tests: Unknown installed file for module"
- ]
- },
- {
- 'category': 'make',
- 'severity': Severity.HARMLESS,
- 'description': 'unusual tags debug eng',
- 'patterns': [r".*: warning: .*: unusual tags debug eng"]
- },
-
- # these next ones are to deal with formatting problems resulting from the
- # log being mixed up by 'make -j'
- {
- 'category': 'C/C++',
- 'severity': Severity.SKIP,
- 'description': 'skip, ,',
- 'patterns': [r".*: warning: ,$"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.SKIP,
- 'description': 'skip,',
- 'patterns': [r".*: warning: $"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.SKIP,
- 'description': 'skip, In file included from ...',
- 'patterns': [r".*: warning: In file included from .+,"]
- },
-
- # warnings from clang-tidy
- group_tidy_warn_pattern('android'),
- simple_tidy_warn_pattern('bugprone-argument-comment'),
- simple_tidy_warn_pattern('bugprone-copy-constructor-init'),
- simple_tidy_warn_pattern('bugprone-fold-init-type'),
- simple_tidy_warn_pattern('bugprone-forward-declaration-namespace'),
- simple_tidy_warn_pattern('bugprone-forwarding-reference-overload'),
- simple_tidy_warn_pattern('bugprone-inaccurate-erase'),
- simple_tidy_warn_pattern('bugprone-incorrect-roundings'),
- simple_tidy_warn_pattern('bugprone-integer-division'),
- simple_tidy_warn_pattern('bugprone-lambda-function-name'),
- simple_tidy_warn_pattern('bugprone-macro-parentheses'),
- simple_tidy_warn_pattern('bugprone-misplaced-widening-cast'),
- simple_tidy_warn_pattern('bugprone-move-forwarding-reference'),
- simple_tidy_warn_pattern('bugprone-sizeof-expression'),
- simple_tidy_warn_pattern('bugprone-string-constructor'),
- simple_tidy_warn_pattern('bugprone-string-integer-assignment'),
- simple_tidy_warn_pattern('bugprone-suspicious-enum-usage'),
- simple_tidy_warn_pattern('bugprone-suspicious-missing-comma'),
- simple_tidy_warn_pattern('bugprone-suspicious-string-compare'),
- simple_tidy_warn_pattern('bugprone-suspicious-semicolon'),
- simple_tidy_warn_pattern('bugprone-undefined-memory-manipulation'),
- simple_tidy_warn_pattern('bugprone-unused-raii'),
- simple_tidy_warn_pattern('bugprone-use-after-move'),
- group_tidy_warn_pattern('bugprone'),
- group_tidy_warn_pattern('cert'),
- group_tidy_warn_pattern('clang-diagnostic'),
- group_tidy_warn_pattern('cppcoreguidelines'),
- group_tidy_warn_pattern('llvm'),
- simple_tidy_warn_pattern('google-default-arguments'),
- simple_tidy_warn_pattern('google-runtime-int'),
- simple_tidy_warn_pattern('google-runtime-operator'),
- simple_tidy_warn_pattern('google-runtime-references'),
- group_tidy_warn_pattern('google-build'),
- group_tidy_warn_pattern('google-explicit'),
- group_tidy_warn_pattern('google-redability'),
- group_tidy_warn_pattern('google-global'),
- group_tidy_warn_pattern('google-redability'),
- group_tidy_warn_pattern('google-redability'),
- group_tidy_warn_pattern('google'),
- simple_tidy_warn_pattern('hicpp-explicit-conversions'),
- simple_tidy_warn_pattern('hicpp-function-size'),
- simple_tidy_warn_pattern('hicpp-invalid-access-moved'),
- simple_tidy_warn_pattern('hicpp-member-init'),
- simple_tidy_warn_pattern('hicpp-delete-operators'),
- simple_tidy_warn_pattern('hicpp-special-member-functions'),
- simple_tidy_warn_pattern('hicpp-use-equals-default'),
- simple_tidy_warn_pattern('hicpp-use-equals-delete'),
- simple_tidy_warn_pattern('hicpp-no-assembler'),
- simple_tidy_warn_pattern('hicpp-noexcept-move'),
- simple_tidy_warn_pattern('hicpp-use-override'),
- group_tidy_warn_pattern('hicpp'),
- group_tidy_warn_pattern('modernize'),
- group_tidy_warn_pattern('misc'),
- simple_tidy_warn_pattern('performance-faster-string-find'),
- simple_tidy_warn_pattern('performance-for-range-copy'),
- simple_tidy_warn_pattern('performance-implicit-cast-in-loop'),
- simple_tidy_warn_pattern('performance-inefficient-string-concatenation'),
- simple_tidy_warn_pattern('performance-type-promotion-in-math-fn'),
- simple_tidy_warn_pattern('performance-unnecessary-copy-initialization'),
- simple_tidy_warn_pattern('performance-unnecessary-value-param'),
- group_tidy_warn_pattern('performance'),
- group_tidy_warn_pattern('readability'),
-
- # warnings from clang-tidy's clang-analyzer checks
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.ANALYZER,
- 'description':
- 'clang-analyzer Unreachable code',
- 'patterns': [
- r".*: warning: This statement is never executed.*UnreachableCode"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.ANALYZER,
- 'description':
- 'clang-analyzer Size of malloc may overflow',
- 'patterns': [
- r".*: warning: .* size of .* may overflow .*MallocOverflow"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.ANALYZER,
- 'description': 'clang-analyzer Stream pointer might be NULL',
- 'patterns': [
- r".*: warning: Stream pointer might be NULL .*unix.Stream"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.ANALYZER,
- 'description': 'clang-analyzer Opened file never closed',
- 'patterns': [r".*: warning: Opened File never closed.*unix.Stream"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.ANALYZER,
- 'description':
- 'clang-analyzer sozeof() on a pointer type',
- 'patterns': [
- r".*: warning: .*calls sizeof.* on a pointer type.*SizeofPtr"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.ANALYZER,
- 'description':
- 'clang-analyzer Pointer arithmetic on non-array variables',
- 'patterns': [
- r".*: warning: Pointer arithmetic on non-array variables "
- r".*PointerArithm"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.ANALYZER,
- 'description':
- 'clang-analyzer Subtraction of pointers of different memory '
- 'chunks',
- 'patterns': [r".*: warning: Subtraction of two pointers .*PointerSub"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.ANALYZER,
- 'description':
- 'clang-analyzer Access out-of-bound array element',
- 'patterns': [
- r".*: warning: Access out-of-bound array element .*ArrayBound"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.ANALYZER,
- 'description': 'clang-analyzer Out of bound memory access',
- 'patterns': [r".*: warning: Out of bound memory access .*ArrayBoundV2"]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.ANALYZER,
- 'description':
- 'clang-analyzer Possible lock order reversal',
- 'patterns': [
- r".*: warning: .* Possible lock order reversal.*PthreadLock"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.ANALYZER,
- 'description':
- 'clang-analyzer Argument is a pointer to uninitialized value',
- 'patterns': [
- r".*: warning: .* argument is a pointer to uninitialized value "
- r".*CallAndMessage"
- ]
- },
- {
- 'category':
- 'C/C++',
- 'severity':
- Severity.ANALYZER,
- 'description':
- 'clang-analyzer cast to struct',
- 'patterns': [
- r".*: warning: Casting a non-structure type to a structure type "
- r".*CastToStruct"
- ]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.ANALYZER,
- 'description': 'clang-analyzer call path problems',
- 'patterns': [r".*: warning: Call Path : .+"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.ANALYZER,
- 'description': 'clang-analyzer excessive padding',
- 'patterns': [r".*: warning: Excessive padding in '.*'"]
- },
- {
- 'category': 'C/C++',
- 'severity': Severity.ANALYZER,
- 'description': 'clang-analyzer other',
- 'patterns': [r".*: .+\[clang-analyzer-.+\]$", r".*: Call Path : .+$"]
- },
-
- # catch-all for warnings this script doesn't know about yet
- {
- 'category': 'C/C++',
- 'severity': Severity.UNKNOWN,
- 'description': 'Unclassified/unrecognized warnings',
- 'patterns': [r".*: warning: .+"]
- },
-]
-
-
def project_name_and_pattern(name, pattern):
return [name, '(^|.*/)' + pattern + '/.*: warning:']
diff --git a/clang_tidy/clang_tidy_warn_patterns.py b/clang_tidy/clang_tidy_warn_patterns.py
new file mode 100755
index 00000000..68ddf50f
--- /dev/null
+++ b/clang_tidy/clang_tidy_warn_patterns.py
@@ -0,0 +1,2576 @@
+#!/usr/bin/env python2
+# -*- coding: utf-8 -*-
+# Copyright 2018 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Clang_Tidy_Warn Warning Patterns data
+
+This file stores the warn_patterns dictionary used in clang_tidy_warn.py and
+its dependencies. It has been put into this file for easier navigation and
+understanding of the original file.
+"""
+
+
+class Severity(object):
+ """Severity levels and attributes."""
+ # numbered by dump order
+ FIXMENOW = 0
+ HIGH = 1
+ MEDIUM = 2
+ LOW = 3
+ ANALYZER = 4
+ TIDY = 5
+ HARMLESS = 6
+ UNKNOWN = 7
+ SKIP = 8
+ range = range(SKIP + 1)
+ attributes = [
+ # pylint:disable=bad-whitespace
+ ['fuchsia', 'FixNow', 'Critical warnings, fix me now'],
+ ['red', 'High', 'High severity warnings'],
+ ['orange', 'Medium', 'Medium severity warnings'],
+ ['yellow', 'Low', 'Low severity warnings'],
+ ['hotpink', 'Analyzer', 'Clang-Analyzer warnings'],
+ ['peachpuff', 'Tidy', 'Clang-Tidy warnings'],
+ ['limegreen', 'Harmless', 'Harmless warnings'],
+ ['lightblue', 'Unknown', 'Unknown warnings'],
+ ['grey', 'Unhandled', 'Unhandled warnings']
+ ]
+ colors = [a[0] for a in attributes]
+ column_headers = [a[1] for a in attributes]
+ headers = [a[2] for a in attributes]
+
+
+def tidy_warn_pattern(description, pattern):
+ return {
+ 'category': 'C/C++',
+ 'severity': Severity.TIDY,
+ 'description': 'clang-tidy ' + description,
+ 'patterns': [r'.*: .+\[' + pattern + r'\]$']
+ }
+
+
+def simple_tidy_warn_pattern(description):
+ return tidy_warn_pattern(description, description)
+
+
+def group_tidy_warn_pattern(description):
+ return tidy_warn_pattern(description, description + r'-.+')
+
+
+warn_patterns = [
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.ANALYZER,
+ 'description': 'clang-analyzer Security warning',
+ 'patterns': [r".*: warning: .+\[clang-analyzer-security.*\]"]
+ },
+ {
+ 'category':
+ 'make',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'make: overriding commands/ignoring old commands',
+ 'patterns': [
+ r".*: warning: overriding commands for target .+",
+ r".*: warning: ignoring old commands for target .+"
+ ]
+ },
+ {
+ 'category': 'make',
+ 'severity': Severity.HIGH,
+ 'description': 'make: LOCAL_CLANG is false',
+ 'patterns': [r".*: warning: LOCAL_CLANG is set to false"]
+ },
+ {
+ 'category':
+ 'make',
+ 'severity':
+ Severity.HIGH,
+ 'description':
+ 'SDK App using platform shared library',
+ 'patterns': [
+ r".*: warning: .+ \(.*app:sdk.*\) should not link to .+ "
+ r"\(native:platform\)"
+ ]
+ },
+ {
+ 'category':
+ 'make',
+ 'severity':
+ Severity.HIGH,
+ 'description':
+ 'System module linking to a vendor module',
+ 'patterns': [
+ r".*: warning: .+ \(.+\) should not link to .+ \(partition:.+\)"
+ ]
+ },
+ {
+ 'category': 'make',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Invalid SDK/NDK linking',
+ 'patterns': [r".*: warning: .+ \(.+\) should not link to .+ \(.+\)"]
+ },
+ {
+ 'category': 'make',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Duplicate header copy',
+ 'patterns': [r".*: warning: Duplicate header copy: .+"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'option':
+ '-Wimplicit-function-declaration',
+ 'description':
+ 'Implicit function declaration',
+ 'patterns': [
+ r".*: warning: implicit declaration of function .+",
+ r".*: warning: implicitly declaring library function"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.SKIP,
+ 'description': 'skip, conflicting types for ...',
+ 'patterns': [r".*: warning: conflicting types for '.+'"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'option':
+ '-Wtype-limits',
+ 'description':
+ 'Expression always evaluates to true or false',
+ 'patterns': [
+ r".*: warning: comparison is always .+ due to limited range of "
+ r"data type",
+ r".*: warning: comparison of unsigned .*expression .+ is always "
+ r"true",
+ r".*: warning: comparison of unsigned .*expression .+ is always "
+ r"false"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'description':
+ 'Potential leak of memory, bad free, use after free',
+ 'patterns': [
+ r".*: warning: Potential leak of memory",
+ r".*: warning: Potential memory leak",
+ r".*: warning: Memory allocated by alloca\(\) should not be "
+ r"deallocated",
+ r".*: warning: Memory allocated by .+ should be deallocated by "
+ r".+ not .+",
+ r".*: warning: 'delete' applied to a pointer that was allocated",
+ r".*: warning: Use of memory after it is freed",
+ r".*: warning: Argument to .+ is the address of .+ variable",
+ r".*: warning: Argument to free\(\) is offset by .+ of memory "
+ r"allocated by", r".*: warning: Attempt to .+ released memory"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'description':
+ 'Use transient memory for control value',
+ 'patterns': [
+ r".*: warning: .+Using such transient memory for the control "
+ r"value is .*dangerous."
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'description':
+ 'Return address of stack memory',
+ 'patterns': [
+ r".*: warning: Address of stack memory .+ returned to caller",
+ r".*: warning: Address of stack memory .+ will be a dangling "
+ r"reference"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'description':
+ 'Problem with vfork',
+ 'patterns': [
+ r".*: warning: This .+ is prohibited after a successful vfork",
+ r".*: warning: Call to function '.+' is insecure "
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'option':
+ 'infinite-recursion',
+ 'description':
+ 'Infinite recursion',
+ 'patterns': [
+ r".*: warning: all paths through this function will call itself"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'description':
+ 'Potential buffer overflow',
+ 'patterns': [
+ r".*: warning: Size argument is greater than .+ the destination "
+ r"buffer", r".*: warning: Potential buffer overflow.",
+ r".*: warning: String copy function overflows destination buffer"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Incompatible pointer types',
+ 'patterns': [
+ r".*: warning: assignment from incompatible pointer type",
+ r".*: warning: return from incompatible pointer type",
+ r".*: warning: passing argument [0-9]+ of '.*' from incompatible "
+ r"pointer type",
+ r".*: warning: initialization from incompatible pointer type"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'option':
+ '-fno-builtin',
+ 'description':
+ 'Incompatible declaration of built in function',
+ 'patterns': [
+ r".*: warning: incompatible implicit declaration of built-in "
+ r"function .+"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'option':
+ '-Wincompatible-library-redeclaration',
+ 'description':
+ 'Incompatible redeclaration of library function',
+ 'patterns': [
+ r".*: warning: incompatible redeclaration of library function .+"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'description':
+ 'Null passed as non-null argument',
+ 'patterns': [
+ r".*: warning: Null passed to a callee that requires a non-null"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wunused-parameter',
+ 'description': 'Unused parameter',
+ 'patterns': [r".*: warning: unused parameter '.*'"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wunused',
+ 'description':
+ 'Unused function, variable, label, comparison, etc.',
+ 'patterns': [
+ r".*: warning: '.+' defined but not used",
+ r".*: warning: unused function '.+'",
+ r".*: warning: unused label '.+'",
+ r".*: warning: relational comparison result unused",
+ r".*: warning: lambda capture .* is not used",
+ r".*: warning: private field '.+' is not used",
+ r".*: warning: unused variable '.+'"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wunused-value',
+ 'description':
+ 'Statement with no effect or result unused',
+ 'patterns': [
+ r".*: warning: statement with no effect",
+ r".*: warning: expression result unused"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wunused-result',
+ 'description':
+ 'Ignoreing return value of function',
+ 'patterns': [
+ r".*: warning: ignoring return value of function .+Wunused-result"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wmissing-field-initializers',
+ 'description': 'Missing initializer',
+ 'patterns': [r".*: warning: missing initializer"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wdelete-non-virtual-dtor',
+ 'description':
+ 'Need virtual destructor',
+ 'patterns': [
+ r".*: warning: delete called .* has virtual functions but "
+ r"non-virtual destructor"
+ ]
+ },
+ {
+ 'category': 'cont.',
+ 'severity': Severity.SKIP,
+ 'description': 'skip, near initialization for ...',
+ 'patterns': [r".*: warning: \(near initialization for '.+'\)"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wdate-time',
+ 'description':
+ 'Expansion of data or time macro',
+ 'patterns': [
+ r".*: warning: expansion of date or time macro is not reproducible"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wformat',
+ 'description':
+ 'Format string does not match arguments',
+ 'patterns': [
+ r".*: warning: format '.+' expects type '.+', but argument "
+ r"[0-9]+ has type '.+'",
+ r".*: warning: more '%' conversions than data arguments",
+ r".*: warning: data argument not used by format string",
+ r".*: warning: incomplete format specifier",
+ r".*: warning: unknown conversion type .* in format",
+ r".*: warning: format .+ expects .+ but argument .+Wformat=",
+ r".*: warning: field precision should have .+ but argument has "
+ r".+Wformat",
+ r".*: warning: format specifies type .+ but the argument has "
+ r".*type .+Wformat"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wformat-extra-args',
+ 'description': 'Too many arguments for format string',
+ 'patterns': [r".*: warning: too many arguments for format"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Too many arguments in call',
+ 'patterns': [r".*: warning: too many arguments in call to "]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wformat-invalid-specifier',
+ 'description':
+ 'Invalid format specifier',
+ 'patterns': [
+ r".*: warning: invalid .+ specifier '.+'.+format-invalid-specifier"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wsign-compare',
+ 'description':
+ 'Comparison between signed and unsigned',
+ 'patterns': [
+ r".*: warning: comparison between signed and unsigned",
+ r".*: warning: comparison of promoted \~unsigned with unsigned",
+ r".*: warning: signed and unsigned type in conditional expression"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Comparison between enum and non-enum',
+ 'patterns': [
+ r".*: warning: enumeral and non-enumeral type in conditional "
+ r"expression"
+ ]
+ },
+ {
+ 'category':
+ 'libpng',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'libpng: zero area',
+ 'patterns': [
+ r".*libpng warning: Ignoring attempt to set cHRM RGB triangle "
+ r"with zero area"
+ ]
+ },
+ {
+ 'category': 'aapt',
+ 'severity': Severity.MEDIUM,
+ 'description': 'aapt: no comment for public symbol',
+ 'patterns': [r".*: warning: No comment for public symbol .+"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wmissing-braces',
+ 'description': 'Missing braces around initializer',
+ 'patterns': [r".*: warning: missing braces around initializer.*"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.HARMLESS,
+ 'description': 'No newline at end of file',
+ 'patterns': [r".*: warning: no newline at end of file"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.HARMLESS,
+ 'description': 'Missing space after macro name',
+ 'patterns': [r".*: warning: missing whitespace after the macro name"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ '-Wcast-align',
+ 'description':
+ 'Cast increases required alignment',
+ 'patterns': [
+ r".*: warning: cast from .* to .* increases required alignment .*"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wcast-qual',
+ 'description':
+ 'Qualifier discarded',
+ 'patterns': [
+ r".*: warning: passing argument [0-9]+ of '.+' discards "
+ r"qualifiers from pointer target type",
+ r".*: warning: assignment discards qualifiers from pointer "
+ r"target type",
+ r".*: warning: passing .+ to parameter of type .+ discards "
+ r"qualifiers",
+ r".*: warning: assigning to .+ from .+ discards qualifiers",
+ r".*: warning: initializing .+ discards qualifiers "
+ r".+types-discards-qualifiers",
+ r".*: warning: return discards qualifiers from pointer target type"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wunknown-attributes',
+ 'description': 'Unknown attribute',
+ 'patterns': [r".*: warning: unknown attribute '.+'"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wignored-attributes',
+ 'description':
+ 'Attribute ignored',
+ 'patterns': [
+ r".*: warning: '_*packed_*' attribute ignored",
+ r".*: warning: attribute declaration must precede definition "
+ r".+ignored-attributes"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wvisibility',
+ 'description':
+ 'Visibility problem',
+ 'patterns': [
+ r".*: warning: declaration of '.+' will not be visible outside "
+ r"of this function"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wattributes',
+ 'description':
+ 'Visibility mismatch',
+ 'patterns': [
+ r".*: warning: '.+' declared with greater visibility than the "
+ r"type of its field '.+'"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Shift count greater than width of type',
+ 'patterns': [r".*: warning: (left|right) shift count >= width of type"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wextern-initializer',
+ 'description':
+ 'extern &lt;foo&gt; is initialized',
+ 'patterns': [
+ r".*: warning: '.+' initialized and declared 'extern'",
+ r".*: warning: 'extern' variable has an initializer"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wold-style-declaration',
+ 'description':
+ 'Old style declaration',
+ 'patterns': [
+ r".*: warning: 'static' is not at beginning of declaration"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wreturn-type',
+ 'description': 'Missing return value',
+ 'patterns': [r".*: warning: control reaches end of non-void function"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wimplicit-int',
+ 'description':
+ 'Implicit int type',
+ 'patterns': [
+ r".*: warning: type specifier missing, defaults to 'int'",
+ r".*: warning: type defaults to 'int' in declaration of '.+'"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wmain-return-type',
+ 'description': 'Main function should return int',
+ 'patterns': [r".*: warning: return type of 'main' is not 'int'"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wuninitialized',
+ 'description':
+ 'Variable may be used uninitialized',
+ 'patterns': [
+ r".*: warning: '.+' may be used uninitialized in this function"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'option':
+ '-Wuninitialized',
+ 'description':
+ 'Variable is used uninitialized',
+ 'patterns': [
+ r".*: warning: '.+' is used uninitialized in this function",
+ r".*: warning: variable '.+' is uninitialized when used here"
+ ]
+ },
+ {
+ 'category':
+ 'ld',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-fshort-enums',
+ 'description':
+ 'ld: possible enum size mismatch',
+ 'patterns': [
+ r".*: warning: .* uses variable-size enums yet the output is to "
+ r"use 32-bit enums; use of enum values across objects may fail"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wpointer-sign',
+ 'description':
+ 'Pointer targets differ in signedness',
+ 'patterns': [
+ r".*: warning: pointer targets in initialization differ in "
+ r"signedness",
+ r".*: warning: pointer targets in assignment differ in signedness",
+ r".*: warning: pointer targets in return differ in signedness",
+ r".*: warning: pointer targets in passing argument [0-9]+ of '.+' "
+ r"differ in signedness"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wstrict-overflow',
+ 'description':
+ 'Assuming overflow does not occur',
+ 'patterns': [
+ r".*: warning: assuming signed overflow does not occur when "
+ r"assuming that .* is always (true|false)"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wempty-body',
+ 'description':
+ 'Suggest adding braces around empty body',
+ 'patterns': [
+ r".*: warning: suggest braces around empty body in an 'if' "
+ r"statement", r".*: warning: empty body in an if-statement",
+ r".*: warning: suggest braces around empty body in an 'else' "
+ r"statement", r".*: warning: empty body in an else-statement"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wparentheses',
+ 'description':
+ 'Suggest adding parentheses',
+ 'patterns': [
+ r".*: warning: suggest explicit braces to avoid ambiguous 'else'",
+ r".*: warning: suggest parentheses around arithmetic in operand "
+ r"of '.+'",
+ r".*: warning: suggest parentheses around comparison in operand "
+ r"of '.+'",
+ r".*: warning: logical not is only applied to the left hand "
+ r"side of this comparison",
+ r".*: warning: using the result of an assignment as a condition "
+ r"without parentheses",
+ r".*: warning: .+ has lower precedence than .+ be evaluated "
+ r"first .+Wparentheses",
+ r".*: warning: suggest parentheses around '.+?' .+ '.+?'",
+ r".*: warning: suggest parentheses around assignment used as "
+ r"truth value"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Static variable used in non-static inline function',
+ 'patterns': [
+ r".*: warning: '.+' is static but used in inline function '.+' "
+ r"which is not static"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wimplicit int',
+ 'description':
+ 'No type or storage class (will default to int)',
+ 'patterns': [
+ r".*: warning: data definition has no type or storage class"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Null pointer',
+ 'patterns': [
+ r".*: warning: Dereference of null pointer",
+ r".*: warning: Called .+ pointer is null",
+ r".*: warning: Forming reference to null pointer",
+ r".*: warning: Returning null reference",
+ r".*: warning: Null pointer passed as an argument to a 'nonnull' "
+ r"parameter",
+ r".*: warning: .+ results in a null pointer dereference",
+ r".*: warning: Access to .+ results in a dereference of a null "
+ r"pointer", r".*: warning: Null pointer argument in"
+ ]
+ },
+ {
+ 'category':
+ 'cont.',
+ 'severity':
+ Severity.SKIP,
+ 'description':
+ 'skip, parameter name (without types) in function declaration',
+ 'patterns': [
+ r".*: warning: parameter names \(without types\) in function "
+ r"declaration"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wstrict-aliasing',
+ 'description':
+ 'Dereferencing &lt;foo&gt; breaks strict aliasing rules',
+ 'patterns': [
+ r".*: warning: dereferencing .* break strict-aliasing rules"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wpointer-to-int-cast',
+ 'description':
+ 'Cast from pointer to integer of different size',
+ 'patterns': [
+ r".*: warning: cast from pointer to integer of different size",
+ r".*: warning: initialization makes pointer from integer without "
+ r"a cast"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wint-to-pointer-cast',
+ 'description':
+ 'Cast to pointer from integer of different size',
+ 'patterns': [
+ r".*: warning: cast to pointer from integer of different size"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Symbol redefined',
+ 'patterns': [r".*: warning: "
+ ".+"
+ " redefined"]
+ },
+ {
+ 'category':
+ 'cont.',
+ 'severity':
+ Severity.SKIP,
+ 'description':
+ 'skip, ... location of the previous definition',
+ 'patterns': [
+ r".*: warning: this is the location of the previous definition"
+ ]
+ },
+ {
+ 'category':
+ 'ld',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'ld: type and size of dynamic symbol are not defined',
+ 'patterns': [
+ r".*: warning: type and size of dynamic symbol `.+' are not "
+ r"defined"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Pointer from integer without cast',
+ 'patterns': [
+ r".*: warning: assignment makes pointer from integer without a "
+ r"cast"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Pointer from integer without cast',
+ 'patterns': [
+ r".*: warning: passing argument [0-9]+ of '.+' makes pointer from "
+ r"integer without a cast"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Integer from pointer without cast',
+ 'patterns': [
+ r".*: warning: assignment makes integer from pointer without a "
+ r"cast"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Integer from pointer without cast',
+ 'patterns': [
+ r".*: warning: passing argument [0-9]+ of '.+' makes integer from "
+ r"pointer without a cast"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Integer from pointer without cast',
+ 'patterns': [
+ r".*: warning: return makes integer from pointer without a cast"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wunknown-pragmas',
+ 'description': 'Ignoring pragma',
+ 'patterns': [r".*: warning: ignoring #pragma .+"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-W#pragma-messages',
+ 'description': 'Pragma warning messages',
+ 'patterns': [r".*: warning: .+W#pragma-messages"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wclobbered',
+ 'description':
+ 'Variable might be clobbered by longjmp or vfork',
+ 'patterns': [
+ r".*: warning: variable '.+' might be clobbered by 'longjmp' or "
+ r"'vfork'"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wclobbered',
+ 'description':
+ 'Argument might be clobbered by longjmp or vfork',
+ 'patterns': [
+ r".*: warning: argument '.+' might be clobbered by 'longjmp' or "
+ r"'vfork'"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wredundant-decls',
+ 'description': 'Redundant declaration',
+ 'patterns': [r".*: warning: redundant redeclaration of '.+'"]
+ },
+ {
+ 'category': 'cont.',
+ 'severity': Severity.SKIP,
+ 'description': 'skip, previous declaration ... was here',
+ 'patterns': [r".*: warning: previous declaration of '.+' was here"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wswitch-enum',
+ 'description':
+ 'Enum value not handled in switch',
+ 'patterns': [
+ r".*: warning: .*enumeration value.* not handled in "
+ r"switch.+Wswitch"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wuser-defined-warnings',
+ 'description': 'User defined warnings',
+ 'patterns': [r".*: warning: .* \[-Wuser-defined-warnings\]$"]
+ },
+ {
+ 'category':
+ 'aapt',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'aapt: No default translation',
+ 'patterns': [
+ r".*: warning: string '.+' has no default translation in .*"
+ ]
+ },
+ {
+ 'category':
+ 'aapt',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'aapt: Missing default or required localization',
+ 'patterns': [
+ r".*: warning: \*\*\*\* string '.+' has no default or required "
+ r"localization for '.+' in .+"
+ ]
+ },
+ {
+ 'category':
+ 'aapt',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'aapt: String marked untranslatable, but translation exists',
+ 'patterns': [
+ r".*: warning: string '.+' in .* marked untranslatable but exists "
+ r"in locale '??_??'"
+ ]
+ },
+ {
+ 'category': 'aapt',
+ 'severity': Severity.MEDIUM,
+ 'description': 'aapt: empty span in string',
+ 'patterns': [r".*: warning: empty '.+' span found in text '.+"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Taking address of temporary',
+ 'patterns': [r".*: warning: taking address of temporary"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Taking address of packed member',
+ 'patterns': [r".*: warning: taking address of packed member"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Possible broken line continuation',
+ 'patterns': [r".*: warning: backslash and newline separated by space"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wundefined-var-template',
+ 'description':
+ 'Undefined variable template',
+ 'patterns': [
+ r".*: warning: instantiation of variable .* no definition is "
+ r"available"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wundefined-inline',
+ 'description': 'Inline function is not defined',
+ 'patterns': [r".*: warning: inline function '.*' is not defined"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Warray-bounds',
+ 'description':
+ 'Array subscript out of bounds',
+ 'patterns': [
+ r".*: warning: array subscript is above array bounds",
+ r".*: warning: Array subscript is undefined",
+ r".*: warning: array subscript is below array bounds"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Excess elements in initializer',
+ 'patterns': [r".*: warning: excess elements in .+ initializer"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Decimal constant is unsigned only in ISO C90',
+ 'patterns': [
+ r".*: warning: this decimal constant is unsigned only in ISO C90"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wmain',
+ 'description': 'main is usually a function',
+ 'patterns': [r".*: warning: 'main' is usually a function"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Typedef ignored',
+ 'patterns': [r".*: warning: 'typedef' was ignored in this declaration"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'option':
+ '-Waddress',
+ 'description':
+ 'Address always evaluates to true',
+ 'patterns': [
+ r".*: warning: the address of '.+' will always evaluate as 'true'"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.FIXMENOW,
+ 'description': 'Freeing a non-heap object',
+ 'patterns': [r".*: warning: attempt to free a non-heap object '.+'"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wchar-subscripts',
+ 'description':
+ 'Array subscript has type char',
+ 'patterns': [
+ r".*: warning: array subscript .+ type 'char'.+Wchar-subscripts"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Constant too large for type',
+ 'patterns': [
+ r".*: warning: integer constant is too large for '.+' type"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Woverflow',
+ 'description':
+ 'Constant too large for type, truncated',
+ 'patterns': [
+ r".*: warning: large integer implicitly truncated to unsigned type"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Winteger-overflow',
+ 'description':
+ 'Overflow in expression',
+ 'patterns': [
+ r".*: warning: overflow in expression; .*Winteger-overflow"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Woverflow',
+ 'description': 'Overflow in implicit constant conversion',
+ 'patterns': [r".*: warning: overflow in implicit constant conversion"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Declaration does not declare anything',
+ 'patterns': [
+ r".*: warning: declaration 'class .+' does not declare anything"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wreorder',
+ 'description':
+ 'Initialization order will be different',
+ 'patterns': [
+ r".*: warning: '.+' will be initialized after",
+ r".*: warning: field .+ will be initialized after .+Wreorder"
+ ]
+ },
+ {
+ 'category': 'cont.',
+ 'severity': Severity.SKIP,
+ 'description': 'skip, ....',
+ 'patterns': [r".*: warning: '.+'"]
+ },
+ {
+ 'category': 'cont.',
+ 'severity': Severity.SKIP,
+ 'description': 'skip, base ...',
+ 'patterns': [r".*: warning: base '.+'"]
+ },
+ {
+ 'category': 'cont.',
+ 'severity': Severity.SKIP,
+ 'description': 'skip, when initialized here',
+ 'patterns': [r".*: warning: when initialized here"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wmissing-parameter-type',
+ 'description': 'Parameter type not specified',
+ 'patterns': [r".*: warning: type of '.+' defaults to 'int'"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wmissing-declarations',
+ 'description': 'Missing declarations',
+ 'patterns': [r".*: warning: declaration does not declare anything"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wmissing-noreturn',
+ 'description':
+ 'Missing noreturn',
+ 'patterns': [
+ r".*: warning: function '.*' could be declared with attribute "
+ r"'noreturn'"
+ ]
+ },
+ # pylint:disable=anomalous-backslash-in-string
+ # TODO(chh): fix the backslash pylint warning.
+ {
+ 'category':
+ 'gcc',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Invalid option for C file',
+ 'patterns': [
+ r".*: warning: command line option "
+ ".+"
+ " is valid for C\+\+\/ObjC\+\+ but not for C"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'User warning',
+ 'patterns': [r".*: warning: #warning "
+ ".+"
+ ""]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wvexing-parse',
+ 'description':
+ 'Vexing parsing problem',
+ 'patterns': [
+ r".*: warning: empty parentheses interpreted as a function "
+ r"declaration"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wextra',
+ 'description': 'Dereferencing void*',
+ 'patterns': [r".*: warning: dereferencing 'void \*' pointer"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Comparison of pointer and integer',
+ 'patterns': [
+ r".*: warning: ordered comparison of pointer with integer zero",
+ r".*: warning: .*comparison between pointer and integer"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Use of error-prone unary operator',
+ 'patterns': [
+ r".*: warning: use of unary operator that may be intended as "
+ r"compound assignment"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wwrite-strings',
+ 'description':
+ 'Conversion of string constant to non-const char*',
+ 'patterns': [
+ r".*: warning: deprecated conversion from string constant to '.+'"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wstrict-prototypes',
+ 'description': 'Function declaration isn'
+ 't a prototype',
+ 'patterns': [r".*: warning: function declaration isn't a prototype"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wignored-qualifiers',
+ 'description':
+ 'Type qualifiers ignored on function return value',
+ 'patterns': [
+ r".*: warning: type qualifiers ignored on function return type",
+ r".*: warning: .+ type qualifier .+ has no effect "
+ r".+Wignored-qualifiers"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description':
+ '&lt;foo&gt; declared inside parameter list, scope limited to '
+ 'this definition',
+ 'patterns': [r".*: warning: '.+' declared inside parameter list"]
+ },
+ {
+ 'category':
+ 'cont.',
+ 'severity':
+ Severity.SKIP,
+ 'description':
+ 'skip, its scope is only this ...',
+ 'patterns': [
+ r".*: warning: its scope is only this definition or declaration, "
+ r"which is probably not what you want"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.LOW,
+ 'option': '-Wcomment',
+ 'description': 'Line continuation inside comment',
+ 'patterns': [r".*: warning: multi-line comment"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.LOW,
+ 'option': '-Wcomment',
+ 'description': 'Comment inside comment',
+ 'patterns': [r".*: warning: "
+ ".+"
+ " within comment"]
+ },
+ # Warning "value stored is never read" could be from clang-tidy or clang
+ # static analyzer.
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.ANALYZER,
+ 'description':
+ 'clang-analyzer Value stored is never read',
+ 'patterns': [
+ r".*: warning: Value stored to .+ is never "
+ r"read.*clang-analyzer-deadcode.DeadStores"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.LOW,
+ 'description': 'Value stored is never read',
+ 'patterns': [r".*: warning: Value stored to .+ is never read"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.LOW,
+ 'option': '-Wdeprecated-declarations',
+ 'description': 'Deprecated declarations',
+ 'patterns': [r".*: warning: .+ is deprecated.+deprecated-declarations"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ '-Wdeprecated-register',
+ 'description':
+ 'Deprecated register',
+ 'patterns': [
+ r".*: warning: 'register' storage class specifier is deprecated"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ '-Wpointer-sign',
+ 'description':
+ 'Converts between pointers to integer types with different sign',
+ 'patterns': [
+ r".*: warning: .+ converts between pointers to integer types "
+ r"with different sign"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.HARMLESS,
+ 'description': 'Extra tokens after #endif',
+ 'patterns': [r".*: warning: extra tokens at end of #endif directive"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wenum-compare',
+ 'description':
+ 'Comparison between different enums',
+ 'patterns': [
+ r".*: warning: comparison between '.+' and '.+'.+Wenum-compare"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wconversion',
+ 'description':
+ 'Conversion may change value',
+ 'patterns': [
+ r".*: warning: converting negative value '.+' to '.+'",
+ r".*: warning: conversion to '.+' .+ may (alter|change)"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wconversion-null',
+ 'description':
+ 'Converting to non-pointer type from NULL',
+ 'patterns': [
+ r".*: warning: converting to non-pointer type '.+' from NULL"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wsign-conversion',
+ 'description': 'Implicit sign conversion',
+ 'patterns': [r".*: warning: implicit conversion changes signedness"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wnull-conversion',
+ 'description':
+ 'Converting NULL to non-pointer type',
+ 'patterns': [
+ r".*: warning: implicit conversion of NULL constant to '.+'"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wnon-literal-null-conversion',
+ 'description':
+ 'Zero used as null pointer',
+ 'patterns': [
+ r".*: warning: expression .* zero treated as a null pointer "
+ r"constant"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Implicit conversion changes value',
+ 'patterns': [
+ r".*: warning: implicit conversion .* changes value from .* to "
+ r".*-conversion"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Passing NULL as non-pointer argument',
+ 'patterns': [
+ r".*: warning: passing NULL to non-pointer argument [0-9]+ of '.+'"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wctor-dtor-privacy',
+ 'description':
+ 'Class seems unusable because of private ctor/dtor',
+ 'patterns': [
+ r".*: warning: all member functions in class '.+' are private"
+ ]
+ },
+ # skip this next one, because it only points out some RefBase-based classes
+ # where having a private destructor is perfectly fine
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.SKIP,
+ 'option':
+ '-Wctor-dtor-privacy',
+ 'description':
+ 'Class seems unusable because of private ctor/dtor',
+ 'patterns': [
+ r".*: warning: 'class .+' only defines a private destructor and "
+ r"has no friends"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wctor-dtor-privacy',
+ 'description':
+ 'Class seems unusable because of private ctor/dtor',
+ 'patterns': [
+ r".*: warning: 'class .+' only defines private constructors and "
+ r"has no friends"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wgnu-static-float-init',
+ 'description':
+ 'In-class initializer for static const float/double',
+ 'patterns': [
+ r".*: warning: in-class initializer for static data member of "
+ r".+const (float|double)"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wpointer-arith',
+ 'description':
+ 'void* used in arithmetic',
+ 'patterns': [
+ r".*: warning: pointer of type 'void \*' used in "
+ r"(arithmetic|subtraction)",
+ r".*: warning: arithmetic on .+ to void is a GNU "
+ r"extension.*Wpointer-arith",
+ r".*: warning: wrong type argument to increment"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wsign-promo',
+ 'description':
+ 'Overload resolution chose to promote from unsigned or enum to '
+ 'signed type',
+ 'patterns': [
+ r".*: warning: passing '.+' chooses '.+' over '.+'.*Wsign-promo"
+ ]
+ },
+ {
+ 'category': 'cont.',
+ 'severity': Severity.SKIP,
+ 'description': 'skip, in call to ...',
+ 'patterns': [r".*: warning: in call to '.+'"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HIGH,
+ 'option':
+ '-Wextra',
+ 'description':
+ 'Base should be explicitly initialized in copy constructor',
+ 'patterns': [
+ r".*: warning: base class '.+' should be explicitly initialized "
+ r"in the copy constructor"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'VLA has zero or negative size',
+ 'patterns': [
+ r".*: warning: Declared variable-length array \(VLA\) has .+ size"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Return value from void function',
+ 'patterns': [
+ r".*: warning: 'return' with a value, in function returning void"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': 'multichar',
+ 'description': 'Multi-character character constant',
+ 'patterns': [r".*: warning: multi-character character constant"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ 'writable-strings',
+ 'description':
+ 'Conversion from string literal to char*',
+ 'patterns': [
+ r".*: warning: .+ does not allow conversion from string literal "
+ r"to 'char \*'"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.LOW,
+ 'option': '-Wextra-semi',
+ 'description': 'Extra \';\'',
+ 'patterns': [r".*: warning: extra ';' .+extra-semi"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.LOW,
+ 'description':
+ 'Useless specifier',
+ 'patterns': [
+ r".*: warning: useless storage class specifier in empty "
+ r"declaration"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.LOW,
+ 'option': '-Wduplicate-decl-specifier',
+ 'description': 'Duplicate declaration specifier',
+ 'patterns': [r".*: warning: duplicate '.+' declaration specifier"]
+ },
+ {
+ 'category': 'logtags',
+ 'severity': Severity.LOW,
+ 'description': 'Duplicate logtag',
+ 'patterns': [r".*: warning: tag \".+\" \(.+\) duplicated in .+"]
+ },
+ {
+ 'category':
+ 'logtags',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ 'typedef-redefinition',
+ 'description':
+ 'Typedef redefinition',
+ 'patterns': [
+ r".*: warning: redefinition of typedef '.+' is a C11 feature"
+ ]
+ },
+ {
+ 'category':
+ 'logtags',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ 'gnu-designator',
+ 'description':
+ 'GNU old-style field designator',
+ 'patterns': [
+ r".*: warning: use of GNU old-style field designator extension"
+ ]
+ },
+ {
+ 'category': 'logtags',
+ 'severity': Severity.LOW,
+ 'option': 'missing-field-initializers',
+ 'description': 'Missing field initializers',
+ 'patterns': [r".*: warning: missing field '.+' initializer"]
+ },
+ {
+ 'category':
+ 'logtags',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ 'missing-braces',
+ 'description':
+ 'Missing braces',
+ 'patterns': [
+ r".*: warning: suggest braces around initialization of",
+ r".*: warning: too many braces around scalar initializer "
+ r".+Wmany-braces-around-scalar-init",
+ r".*: warning: braces around scalar initializer"
+ ]
+ },
+ {
+ 'category':
+ 'logtags',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ 'sign-compare',
+ 'description':
+ 'Comparison of integers of different signs',
+ 'patterns': [
+ r".*: warning: comparison of integers of different "
+ r"signs.+sign-compare"
+ ]
+ },
+ {
+ 'category': 'logtags',
+ 'severity': Severity.LOW,
+ 'option': 'dangling-else',
+ 'description': 'Add braces to avoid dangling else',
+ 'patterns': [
+ r".*: warning: add explicit braces to avoid dangling else"
+ ]
+ },
+ {
+ 'category':
+ 'logtags',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ 'initializer-overrides',
+ 'description':
+ 'Initializer overrides prior initialization',
+ 'patterns': [
+ r".*: warning: initializer overrides prior initialization of this "
+ r"subobject"
+ ]
+ },
+ {
+ 'category': 'logtags',
+ 'severity': Severity.LOW,
+ 'option': 'self-assign',
+ 'description': 'Assigning value to self',
+ 'patterns': [
+ r".*: warning: explicitly assigning value of .+ to itself"
+ ]
+ },
+ {
+ 'category':
+ 'logtags',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ 'gnu-variable-sized-type-not-at-end',
+ 'description':
+ 'GNU extension, variable sized type not at end',
+ 'patterns': [
+ r".*: warning: field '.+' with variable sized type '.+' not at "
+ r"the end of a struct or class"
+ ]
+ },
+ {
+ 'category':
+ 'logtags',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ 'tautological-constant-out-of-range-compare',
+ 'description':
+ 'Comparison of constant is always false/true',
+ 'patterns': [
+ r".*: comparison of .+ is always "
+ r".+Wtautological-constant-out-of-range-compare"
+ ]
+ },
+ {
+ 'category': 'logtags',
+ 'severity': Severity.LOW,
+ 'option': 'overloaded-virtual',
+ 'description': 'Hides overloaded virtual function',
+ 'patterns': [r".*: '.+' hides overloaded virtual function"]
+ },
+ {
+ 'category':
+ 'logtags',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ 'incompatible-pointer-types',
+ 'description':
+ 'Incompatible pointer types',
+ 'patterns': [
+ r".*: warning: incompatible pointer types "
+ r".+Wincompatible-pointer-types"
+ ]
+ },
+ {
+ 'category':
+ 'logtags',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ 'asm-operand-widths',
+ 'description':
+ 'ASM value size does not match register size',
+ 'patterns': [
+ r".*: warning: value size does not match register size "
+ r"specified by the constraint and modifier"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.LOW,
+ 'option': 'tautological-compare',
+ 'description': 'Comparison of self is always false',
+ 'patterns': [r".*: self-comparison always evaluates to false"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.LOW,
+ 'option': 'constant-logical-operand',
+ 'description': 'Logical op with constant operand',
+ 'patterns': [r".*: use of logical '.+' with constant operand"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ 'literal-suffix',
+ 'description':
+ 'Needs a space between literal and string macro',
+ 'patterns': [
+ r".*: warning: invalid suffix on literal.+ requires a space "
+ r".+Wliteral-suffix"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.LOW,
+ 'option': '#warnings',
+ 'description': 'Warnings from #warning',
+ 'patterns': [r".*: warning: .+-W#warnings"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ 'absolute-value',
+ 'description':
+ 'Using float/int absolute value function with int/float argument',
+ 'patterns': [
+ r".*: warning: using .+ absolute value function .+ when argument "
+ r"is .+ type .+Wabsolute-value",
+ r".*: warning: absolute value function '.+' given .+ which may "
+ r"cause truncation .+Wabsolute-value"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.LOW,
+ 'option':
+ '-Wc++11-extensions',
+ 'description':
+ 'Using C++11 extensions',
+ 'patterns': [
+ r".*: warning: 'auto' type specifier is a C\+\+11 extension"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.LOW,
+ 'description':
+ 'Refers to implicitly defined namespace',
+ 'patterns': [
+ r".*: warning: using directive refers to implicitly-defined "
+ r"namespace .+"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.LOW,
+ 'option': '-Winvalid-pp-token',
+ 'description': 'Invalid pp token',
+ 'patterns': [r".*: warning: missing .+Winvalid-pp-token"]
+ },
+ {
+ 'category':
+ 'link',
+ 'severity':
+ Severity.LOW,
+ 'description':
+ 'need glibc to link',
+ 'patterns': [
+ r".*: warning: .* requires at runtime .* glibc .* for linking"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Operator new returns NULL',
+ 'patterns': [
+ r".*: warning: 'operator new' must not return NULL unless it is "
+ r"declared 'throw\(\)' .+"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wnull-arithmetic',
+ 'description':
+ 'NULL used in arithmetic',
+ 'patterns': [
+ r".*: warning: NULL used in arithmetic",
+ r".*: warning: comparison between NULL and non-pointer"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ 'header-guard',
+ 'description':
+ 'Misspelled header guard',
+ 'patterns': [
+ r".*: warning: '.+' is used as a header guard .+ followed by .+ "
+ r"different macro"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': 'empty-body',
+ 'description': 'Empty loop body',
+ 'patterns': [r".*: warning: .+ loop has empty body"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ 'enum-conversion',
+ 'description':
+ 'Implicit conversion from enumeration type',
+ 'patterns': [
+ r".*: warning: implicit conversion from enumeration type '.+'"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': 'switch',
+ 'description': 'case value not in enumerated type',
+ 'patterns': [r".*: warning: case value not in enumerated type '.+'"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Undefined result',
+ 'patterns': [
+ r".*: warning: The result of .+ is undefined",
+ r".*: warning: passing an object that .+ has undefined behavior "
+ r"\[-Wvarargs\]",
+ r".*: warning: 'this' pointer cannot be null in well-defined "
+ r"C\+\+ code;",
+ r".*: warning: shifting a negative signed value is undefined"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Division by zero',
+ 'patterns': [r".*: warning: Division by zero"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Use of deprecated method',
+ 'patterns': [r".*: warning: '.+' is deprecated .+"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Use of garbage or uninitialized value',
+ 'patterns': [
+ r".*: warning: .+ is a garbage value",
+ r".*: warning: Function call argument is an uninitialized value",
+ r".*: warning: Undefined or garbage value returned to caller",
+ r".*: warning: Called .+ pointer is.+uninitialized",
+ # note that the below matches a typo in compiler message
+ r".*: warning: Called .+ pointer is.+uninitalized",
+ r".*: warning: Use of zero-allocated memory",
+ r".*: warning: Dereference of undefined pointer value",
+ r".*: warning: Passed-by-value .+ contains uninitialized data",
+ r".*: warning: Branch condition evaluates to a garbage value",
+ r".*: warning: The .+ of .+ is an uninitialized value.",
+ r".*: warning: .+ is used uninitialized whenever "
+ r".+sometimes-uninitialized",
+ r".*: warning: Assigned value is garbage or undefined"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Result of malloc type incompatible with sizeof operand type',
+ 'patterns': [
+ r".*: warning: Result of '.+' is converted to .+ incompatible "
+ r"with sizeof operand type"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wsizeof-array-argument',
+ 'description':
+ 'Sizeof on array argument',
+ 'patterns': [
+ r".*: warning: sizeof on array function parameter will return"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'option': '-Wsizeof-pointer-memacces',
+ 'description': 'Bad argument size of memory access functions',
+ 'patterns': [r".*: warning: .+\[-Wsizeof-pointer-memaccess\]"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Return value not checked',
+ 'patterns': [r".*: warning: The return value from .+ is not checked"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Possible heap pollution',
+ 'patterns': [r".*: warning: .*Possible heap pollution from .+ type .+"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Allocation size of 0 byte',
+ 'patterns': [
+ r".*: warning: Call to .+ has an allocation size of 0 byte"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'description':
+ 'Result of malloc type incompatible with sizeof operand type',
+ 'patterns': [
+ r".*: warning: Result of '.+' is converted to .+ incompatible "
+ r"with sizeof operand type"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wfor-loop-analysis',
+ 'description':
+ 'Variable used in loop condition not modified in loop body',
+ 'patterns': [
+ r".*: warning: variable '.+' used in loop "
+ r"condition.*Wfor-loop-analysis"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.MEDIUM,
+ 'description': 'Closing a previously closed file',
+ 'patterns': [r".*: warning: Closing a previously closed file"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wunnamed-type-template-args',
+ 'description':
+ 'Unnamed template type argument',
+ 'patterns': [
+ r".*: warning: template argument.+Wunnamed-type-template-args"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.MEDIUM,
+ 'option':
+ '-Wimplicit-fallthrough',
+ 'description':
+ 'Unannotated fall-through between switch labels',
+ 'patterns': [
+ r".*: warning: unannotated fall-through between switch "
+ r"labels.+Wimplicit-fallthrough"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HARMLESS,
+ 'description':
+ 'Discarded qualifier from pointer target type',
+ 'patterns': [
+ r".*: warning: .+ discards '.+' qualifier from pointer target type"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HARMLESS,
+ 'description':
+ 'Use snprintf instead of sprintf',
+ 'patterns': [
+ r".*: warning: .*sprintf is often misused; please use snprintf"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.HARMLESS,
+ 'description': 'Unsupported optimizaton flag',
+ 'patterns': [r".*: warning: optimization flag '.+' is not supported"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HARMLESS,
+ 'description':
+ 'Extra or missing parentheses',
+ 'patterns': [
+ r".*: warning: equality comparison with extraneous parentheses",
+ r".*: warning: .+ within .+Wlogical-op-parentheses"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.HARMLESS,
+ 'option':
+ 'mismatched-tags',
+ 'description':
+ 'Mismatched class vs struct tags',
+ 'patterns': [
+ r".*: warning: '.+' defined as a .+ here but previously declared "
+ r"as a .+mismatched-tags",
+ r".*: warning: .+ was previously declared as a .+mismatched-tags"
+ ]
+ },
+ {
+ 'category': 'FindEmulator',
+ 'severity': Severity.HARMLESS,
+ 'description': 'FindEmulator: No such file or directory',
+ 'patterns': [
+ r".*: warning: FindEmulator: .* No such file or directory"
+ ]
+ },
+ {
+ 'category':
+ 'google_tests',
+ 'severity':
+ Severity.HARMLESS,
+ 'description':
+ 'google_tests: unknown installed file',
+ 'patterns': [
+ r".*: warning: .*_tests: Unknown installed file for module"
+ ]
+ },
+ {
+ 'category': 'make',
+ 'severity': Severity.HARMLESS,
+ 'description': 'unusual tags debug eng',
+ 'patterns': [r".*: warning: .*: unusual tags debug eng"]
+ },
+
+ # these next ones are to deal with formatting problems resulting from the
+ # log being mixed up by 'make -j'
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.SKIP,
+ 'description': 'skip, ,',
+ 'patterns': [r".*: warning: ,$"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.SKIP,
+ 'description': 'skip,',
+ 'patterns': [r".*: warning: $"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.SKIP,
+ 'description': 'skip, In file included from ...',
+ 'patterns': [r".*: warning: In file included from .+,"]
+ },
+
+ # warnings from clang-tidy
+ group_tidy_warn_pattern('android'),
+ simple_tidy_warn_pattern('bugprone-argument-comment'),
+ simple_tidy_warn_pattern('bugprone-copy-constructor-init'),
+ simple_tidy_warn_pattern('bugprone-fold-init-type'),
+ simple_tidy_warn_pattern('bugprone-forward-declaration-namespace'),
+ simple_tidy_warn_pattern('bugprone-forwarding-reference-overload'),
+ simple_tidy_warn_pattern('bugprone-inaccurate-erase'),
+ simple_tidy_warn_pattern('bugprone-incorrect-roundings'),
+ simple_tidy_warn_pattern('bugprone-integer-division'),
+ simple_tidy_warn_pattern('bugprone-lambda-function-name'),
+ simple_tidy_warn_pattern('bugprone-macro-parentheses'),
+ simple_tidy_warn_pattern('bugprone-misplaced-widening-cast'),
+ simple_tidy_warn_pattern('bugprone-move-forwarding-reference'),
+ simple_tidy_warn_pattern('bugprone-sizeof-expression'),
+ simple_tidy_warn_pattern('bugprone-string-constructor'),
+ simple_tidy_warn_pattern('bugprone-string-integer-assignment'),
+ simple_tidy_warn_pattern('bugprone-suspicious-enum-usage'),
+ simple_tidy_warn_pattern('bugprone-suspicious-missing-comma'),
+ simple_tidy_warn_pattern('bugprone-suspicious-string-compare'),
+ simple_tidy_warn_pattern('bugprone-suspicious-semicolon'),
+ simple_tidy_warn_pattern('bugprone-undefined-memory-manipulation'),
+ simple_tidy_warn_pattern('bugprone-unused-raii'),
+ simple_tidy_warn_pattern('bugprone-use-after-move'),
+ group_tidy_warn_pattern('bugprone'),
+ group_tidy_warn_pattern('cert'),
+ group_tidy_warn_pattern('clang-diagnostic'),
+ group_tidy_warn_pattern('cppcoreguidelines'),
+ group_tidy_warn_pattern('llvm'),
+ simple_tidy_warn_pattern('google-default-arguments'),
+ simple_tidy_warn_pattern('google-runtime-int'),
+ simple_tidy_warn_pattern('google-runtime-operator'),
+ simple_tidy_warn_pattern('google-runtime-references'),
+ group_tidy_warn_pattern('google-build'),
+ group_tidy_warn_pattern('google-explicit'),
+ group_tidy_warn_pattern('google-redability'),
+ group_tidy_warn_pattern('google-global'),
+ group_tidy_warn_pattern('google-redability'),
+ group_tidy_warn_pattern('google-redability'),
+ group_tidy_warn_pattern('google'),
+ simple_tidy_warn_pattern('hicpp-explicit-conversions'),
+ simple_tidy_warn_pattern('hicpp-function-size'),
+ simple_tidy_warn_pattern('hicpp-invalid-access-moved'),
+ simple_tidy_warn_pattern('hicpp-member-init'),
+ simple_tidy_warn_pattern('hicpp-delete-operators'),
+ simple_tidy_warn_pattern('hicpp-special-member-functions'),
+ simple_tidy_warn_pattern('hicpp-use-equals-default'),
+ simple_tidy_warn_pattern('hicpp-use-equals-delete'),
+ simple_tidy_warn_pattern('hicpp-no-assembler'),
+ simple_tidy_warn_pattern('hicpp-noexcept-move'),
+ simple_tidy_warn_pattern('hicpp-use-override'),
+ group_tidy_warn_pattern('hicpp'),
+ group_tidy_warn_pattern('modernize'),
+ group_tidy_warn_pattern('misc'),
+ simple_tidy_warn_pattern('performance-faster-string-find'),
+ simple_tidy_warn_pattern('performance-for-range-copy'),
+ simple_tidy_warn_pattern('performance-implicit-cast-in-loop'),
+ simple_tidy_warn_pattern('performance-inefficient-string-concatenation'),
+ simple_tidy_warn_pattern('performance-type-promotion-in-math-fn'),
+ simple_tidy_warn_pattern('performance-unnecessary-copy-initialization'),
+ simple_tidy_warn_pattern('performance-unnecessary-value-param'),
+ group_tidy_warn_pattern('performance'),
+ group_tidy_warn_pattern('readability'),
+
+ # warnings from clang-tidy's clang-analyzer checks
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.ANALYZER,
+ 'description':
+ 'clang-analyzer Unreachable code',
+ 'patterns': [
+ r".*: warning: This statement is never executed.*UnreachableCode"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.ANALYZER,
+ 'description':
+ 'clang-analyzer Size of malloc may overflow',
+ 'patterns': [
+ r".*: warning: .* size of .* may overflow .*MallocOverflow"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.ANALYZER,
+ 'description': 'clang-analyzer Stream pointer might be NULL',
+ 'patterns': [
+ r".*: warning: Stream pointer might be NULL .*unix.Stream"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.ANALYZER,
+ 'description': 'clang-analyzer Opened file never closed',
+ 'patterns': [r".*: warning: Opened File never closed.*unix.Stream"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.ANALYZER,
+ 'description':
+ 'clang-analyzer sozeof() on a pointer type',
+ 'patterns': [
+ r".*: warning: .*calls sizeof.* on a pointer type.*SizeofPtr"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.ANALYZER,
+ 'description':
+ 'clang-analyzer Pointer arithmetic on non-array variables',
+ 'patterns': [
+ r".*: warning: Pointer arithmetic on non-array variables "
+ r".*PointerArithm"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.ANALYZER,
+ 'description':
+ 'clang-analyzer Subtraction of pointers of different memory '
+ 'chunks',
+ 'patterns': [r".*: warning: Subtraction of two pointers .*PointerSub"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.ANALYZER,
+ 'description':
+ 'clang-analyzer Access out-of-bound array element',
+ 'patterns': [
+ r".*: warning: Access out-of-bound array element .*ArrayBound"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.ANALYZER,
+ 'description': 'clang-analyzer Out of bound memory access',
+ 'patterns': [r".*: warning: Out of bound memory access .*ArrayBoundV2"]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.ANALYZER,
+ 'description':
+ 'clang-analyzer Possible lock order reversal',
+ 'patterns': [
+ r".*: warning: .* Possible lock order reversal.*PthreadLock"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.ANALYZER,
+ 'description':
+ 'clang-analyzer Argument is a pointer to uninitialized value',
+ 'patterns': [
+ r".*: warning: .* argument is a pointer to uninitialized value "
+ r".*CallAndMessage"
+ ]
+ },
+ {
+ 'category':
+ 'C/C++',
+ 'severity':
+ Severity.ANALYZER,
+ 'description':
+ 'clang-analyzer cast to struct',
+ 'patterns': [
+ r".*: warning: Casting a non-structure type to a structure type "
+ r".*CastToStruct"
+ ]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.ANALYZER,
+ 'description': 'clang-analyzer call path problems',
+ 'patterns': [r".*: warning: Call Path : .+"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.ANALYZER,
+ 'description': 'clang-analyzer excessive padding',
+ 'patterns': [r".*: warning: Excessive padding in '.*'"]
+ },
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.ANALYZER,
+ 'description': 'clang-analyzer other',
+ 'patterns': [r".*: .+\[clang-analyzer-.+\]$", r".*: Call Path : .+$"]
+ },
+
+ # catch-all for warnings this script doesn't know about yet
+ {
+ 'category': 'C/C++',
+ 'severity': Severity.UNKNOWN,
+ 'description': 'Unclassified/unrecognized warnings',
+ 'patterns': [r".*: warning: .+"]
+ },
+]