blob: 68ddf50f60f623c0ddd461c1e883a5d517fbd671 [file] [log] [blame]
#!/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 <foo> 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 <foo> 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':
'<foo> 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: .+"]
},
]