Loading tools/warn.py +173 −6 Original line number Diff line number Diff line Loading @@ -46,9 +46,34 @@ warnpatterns = [ 'patterns':[r".*: warning: conflicting types for '.+'"] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'-Wtype-limits', 'description':'Expression always evaluates to true or false', 'patterns':[r".*: warning: comparison is always false due to limited range of data type", 'patterns':[r".*: warning: comparison is always .+ due to limited range of data type", r".*: warning: comparison of unsigned expression >= 0 is always true", r".*: warning: comparison of unsigned expression < 0 is always false"] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'', '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 .+ should be deallocated by .+ 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 allocated by", r".*: warning: Attempt to .+ released memory"] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'', 'description':'Return address of stack memory', 'patterns':[r".*: warning: Address of stack memory .+ returned to caller"] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'', 'description':'Problem with vfork', 'patterns':[r".*: warning: This .+ is prohibited after a successful vfork", r".*: warning: Call to function 'vfork' is insecure "] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'infinite-recursion', 'description':'Infinite recursion', 'patterns':[r".*: warning: all paths through this function will call itself"] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'', 'description':'Potential buffer overflow', 'patterns':[r".*: warning: Size argument is greater than .+ the destination buffer", r".*: warning: Potential buffer overflow.", r".*: warning: String copy function overflows destination buffer"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Incompatible pointer types', 'patterns':[r".*: warning: assignment from incompatible pointer type", Loading Loading @@ -76,10 +101,19 @@ warnpatterns = [ 'patterns':[r".*: warning: \(near initialization for '.+'\)"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wformat', 'description':'Format string does not match arguments', 'patterns':[r".*: warning: format '.+' expects type '.+', but argument [0-9]+ has type '.+'"] }, 'patterns':[r".*: warning: format '.+' expects type '.+', but argument [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: format .+ expects .+ but argument .+Wformat=", r".*: warning: field precision should have .+ but argument has .+Wformat", r".*: warning: format specifies type .+ but the argument has type .+Wformat"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], '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, 'members':[], 'option':'-Wformat-invalid-specifier', 'description':'Invalid format specifier', 'patterns':[r".*: warning: invalid .+ specifier '.+'.+format-invalid-specifier"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wsign-compare', 'description':'Comparison between signed and unsigned', 'patterns':[r".*: warning: comparison between signed and unsigned", Loading Loading @@ -125,7 +159,8 @@ warnpatterns = [ 'patterns':[r".*: warning: '.+' may be used uninitialized in this function"] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'-Wuninitialized', 'description':'Variable is used uninitialized', 'patterns':[r".*: warning: '.+' is used uninitialized in this function"] }, 'patterns':[r".*: warning: '.+' is used uninitialized in this function", r".*: warning: variable '.+' is uninitialized when used here"] }, { 'category':'ld', 'severity':severity.MEDIUM, 'members':[], 'option':'-fshort-enums', 'description':'ld: possible enum size mismatch', 'patterns':[r".*: warning: .* uses variable-size enums yet the output is to use 32-bit enums; use of enum values across objects may fail"] }, Loading Loading @@ -157,6 +192,16 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], '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, 'members':[], 'option':'', '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' parameter", r".*: warning: .+ results in a null pointer dereference", r".*: warning: Access to .+ results in a dereference of a null pointer", r".*: warning: Null pointer argument in"] }, { 'category':'cont.', 'severity':severity.SKIP, 'members':[], 'option':'', 'description':'', 'patterns':[r".*: warning: type defaults to 'int' in declaration of '.+'"] }, Loading Loading @@ -259,7 +304,7 @@ warnpatterns = [ 'patterns':[r".*: warning: attempt to free a non-heap object '.+'"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wchar-subscripts', 'description':'Array subscript has type char', 'patterns':[r".*: warning: array subscript has type 'char'"] }, 'patterns':[r".*: warning: array subscript .+ type 'char'.+Wchar-subscripts"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Constant too large for type', 'patterns':[r".*: warning: integer constant is too large for '.+' type"] }, Loading Loading @@ -307,7 +352,8 @@ warnpatterns = [ 'patterns':[r".*: warning: function declaration isn't a prototype"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wignored-qualifiers', 'description':'Type qualifiers ignored on function return value', 'patterns':[r".*: warning: type qualifiers ignored on function return type"] }, 'patterns':[r".*: warning: type qualifiers ignored on function return type", r".*: warning: .+ type qualifier .+ has no effect .+Wignored-qualifiers"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'<foo> declared inside parameter list, scope limited to this definition', 'patterns':[r".*: warning: '.+' declared inside parameter list"] }, Loading @@ -320,12 +366,21 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'-Wcomment', 'description':'Comment inside comment', 'patterns':[r".*: warning: "".+"" within comment"] }, { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'', 'description':'Value stored is never read', 'patterns':[r".*: warning: Value stored to .+ is never read"] }, { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'-Wdeprecated-declarations', 'description':'Deprecated declarations', 'patterns':[r".*: warning: .+ is deprecated.+deprecated-declarations"] }, { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'-Wpointer-sign', 'description':'Converts between pointers to integer types with different sign', 'patterns':[r".*: warning: .+ converts between pointers to integer types with different sign"] }, { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'', 'description':'Extra tokens after #endif', 'patterns':[r".*: warning: extra tokens at end of #endif directive"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wenum-compare', 'description':'Comparison between different enums', 'patterns':[r".*: warning: comparison between 'enum .+' and 'enum .+'"] }, 'patterns':[r".*: warning: comparison between '.+' and '.+'.+Wenum-compare"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wconversion', 'description':'Implicit conversion of negative number to unsigned type', 'patterns':[r".*: warning: converting negative value '.+' to '.+'"] }, Loading @@ -345,6 +400,7 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wpointer-arith', 'description':'void* used in arithmetic' , 'patterns':[r".*: warning: pointer of type 'void \*' used in (arithmetic|subtraction)", r".*: warning: arithmetic on .+ to void is a GNU extension.*Wpointer-arith", r".*: warning: wrong type argument to increment"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wsign-promo', 'description':'Overload resolution chose to promote from unsigned or enum to signed type' , Loading @@ -358,24 +414,135 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Converting from <type> to <other type>', 'patterns':[r".*: warning: converting to '.+' from '.+'"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'VLA has zero or negative size', 'patterns':[r".*: warning: Declared variable-length array \(VLA\) has .+ size"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Return value from void function', 'patterns':[r".*: warning: 'return' with a value, in function returning void"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'multichar', 'description':'Multi-character character constant', 'patterns':[r".*: warning: multi-character character constant"] }, { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'', 'description':'Useless specifier', 'patterns':[r".*: warning: useless storage class specifier in empty declaration"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'', 'description':'Duplicate logtag', 'patterns':[r".*: warning: tag "".+"" \(None\) duplicated in .+"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'typedef-redefinition', 'description':'Typedef redefinition', 'patterns':[r".*: warning: redefinition of typedef '.+' is a C11 feature"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], '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, 'members':[], 'option':'missing-field-initializers', 'description':'Missing field initializers', 'patterns':[r".*: warning: missing field '.+' initializer"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'missing-braces', 'description':'Missing braces', 'patterns':[r".*: warning: suggest braces around initialization of", r".*: warning: braces around scalar initializer"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'sign-compare', 'description':'Comparison of integers of different signs', 'patterns':[r".*: warning: comparison of integers of different signs.+sign-compare"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], '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, 'members':[], 'option':'initializer-overrides', 'description':'Initializer overrides prior initialization', 'patterns':[r".*: warning: initializer overrides prior initialization of this subobject"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'self-assign', 'description':'Assigning value to self', 'patterns':[r".*: warning: explicitly assigning value of .+ to itself"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], '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 the end of a struct or class"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'tautological-constant-out-of-range-compare', 'description':'Comparison of constant is always false/true', 'patterns':[r".*: comparison of .+ is always .+Wtautological-constant-out-of-range-compare"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'overloaded-virtual', 'description':'Hides overloaded virtual function', 'patterns':[r".*: '.+' hides overloaded virtual function"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'incompatible-pointer-types', 'description':'Incompatible pointer types', 'patterns':[r".*: warning: incompatible pointer types .+Wincompatible-pointer-types"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'asm-operand-widths', 'description':'ASM value size does not match registyer size', 'patterns':[r".*: warning: value size does not match register size specified by the constraint and modifier"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'literal-suffix', 'description':'Needs a space between literal and string macro', 'patterns':[r".*: warning: invalid suffix on literal.+ requires a space .+Wliteral-suffix"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'#warnings', 'description':'Warnings from #warning', 'patterns':[r".*: warning: .+-W#warnings"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Operator new returns NULL', 'patterns':[r".*: warning: 'operator new' must not return NULL unless it is declared 'throw\(\)' .+"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'NULL used in arithmetic', 'patterns':[r".*: warning: NULL used in arithmetic"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'enum-conversion', 'description':'Implicit conversion from enumeration type', 'patterns':[r".*: warning: implicit conversion from enumeration type '.+'"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'switch', 'description':'case value not in enumerated type', 'patterns':[r".*: warning: case value not in enumerated type '.+'"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Undefined result', 'patterns':[r".*: warning: The result of .+ is undefined", r".*: warning: 'this' pointer cannot be null in well-defined C\+\+ code;", r".*: warning: shifting a negative signed value is undefined"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Division by zero', 'patterns':[r".*: warning: Division by zero"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Use of deprecated method', 'patterns':[r".*: warning: '.+' is deprecated .+"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', '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: 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 .+sometimes-uninitialized", r".*: warning: Assigned value is garbage or undefined"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Result of malloc type incompatible with sizeof operand type', 'patterns':[r".*: warning: Result of '.+' is converted to .+ incompatible with sizeof operand type"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Return value not checked', 'patterns':[r".*: warning: The return value from .+ is not checked"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Possible heap pollution', 'patterns':[r".*: warning: .*Possible heap pollution from .+ type .+"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Allocation size of 0 byte', 'patterns':[r".*: warning: Call to .+ has an allocation size of 0 byte"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Result of malloc type incompatible with sizeof operand type', 'patterns':[r".*: warning: Result of '.+' is converted to .+ incompatible with sizeof operand type"] }, { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'', 'description':'Discarded qualifier from pointer target type', 'patterns':[r".*: warning: .+ discards '.+' qualifier from pointer target type"] }, { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'', 'description':'Use snprintf instead of sprintf', 'patterns':[r".*: warning: .*sprintf is often misused; please use snprintf"] }, { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'', 'description':'Unsupported optimizaton flag', 'patterns':[r".*: warning: optimization flag '.+' is not supported"] }, { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'', '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, 'members':[], 'option':'mismatched-tags', 'description':'Mismatched class vs struct tags', 'patterns':[r".*: warning: '.+' defined as a .+ here but previously declared as a .+mismatched-tags", r".*: warning: .+ was previously declared as a .+mismatched-tags"] }, # 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, 'members':[], 'option':'', Loading Loading
tools/warn.py +173 −6 Original line number Diff line number Diff line Loading @@ -46,9 +46,34 @@ warnpatterns = [ 'patterns':[r".*: warning: conflicting types for '.+'"] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'-Wtype-limits', 'description':'Expression always evaluates to true or false', 'patterns':[r".*: warning: comparison is always false due to limited range of data type", 'patterns':[r".*: warning: comparison is always .+ due to limited range of data type", r".*: warning: comparison of unsigned expression >= 0 is always true", r".*: warning: comparison of unsigned expression < 0 is always false"] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'', '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 .+ should be deallocated by .+ 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 allocated by", r".*: warning: Attempt to .+ released memory"] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'', 'description':'Return address of stack memory', 'patterns':[r".*: warning: Address of stack memory .+ returned to caller"] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'', 'description':'Problem with vfork', 'patterns':[r".*: warning: This .+ is prohibited after a successful vfork", r".*: warning: Call to function 'vfork' is insecure "] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'infinite-recursion', 'description':'Infinite recursion', 'patterns':[r".*: warning: all paths through this function will call itself"] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'', 'description':'Potential buffer overflow', 'patterns':[r".*: warning: Size argument is greater than .+ the destination buffer", r".*: warning: Potential buffer overflow.", r".*: warning: String copy function overflows destination buffer"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Incompatible pointer types', 'patterns':[r".*: warning: assignment from incompatible pointer type", Loading Loading @@ -76,10 +101,19 @@ warnpatterns = [ 'patterns':[r".*: warning: \(near initialization for '.+'\)"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wformat', 'description':'Format string does not match arguments', 'patterns':[r".*: warning: format '.+' expects type '.+', but argument [0-9]+ has type '.+'"] }, 'patterns':[r".*: warning: format '.+' expects type '.+', but argument [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: format .+ expects .+ but argument .+Wformat=", r".*: warning: field precision should have .+ but argument has .+Wformat", r".*: warning: format specifies type .+ but the argument has type .+Wformat"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], '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, 'members':[], 'option':'-Wformat-invalid-specifier', 'description':'Invalid format specifier', 'patterns':[r".*: warning: invalid .+ specifier '.+'.+format-invalid-specifier"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wsign-compare', 'description':'Comparison between signed and unsigned', 'patterns':[r".*: warning: comparison between signed and unsigned", Loading Loading @@ -125,7 +159,8 @@ warnpatterns = [ 'patterns':[r".*: warning: '.+' may be used uninitialized in this function"] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'-Wuninitialized', 'description':'Variable is used uninitialized', 'patterns':[r".*: warning: '.+' is used uninitialized in this function"] }, 'patterns':[r".*: warning: '.+' is used uninitialized in this function", r".*: warning: variable '.+' is uninitialized when used here"] }, { 'category':'ld', 'severity':severity.MEDIUM, 'members':[], 'option':'-fshort-enums', 'description':'ld: possible enum size mismatch', 'patterns':[r".*: warning: .* uses variable-size enums yet the output is to use 32-bit enums; use of enum values across objects may fail"] }, Loading Loading @@ -157,6 +192,16 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], '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, 'members':[], 'option':'', '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' parameter", r".*: warning: .+ results in a null pointer dereference", r".*: warning: Access to .+ results in a dereference of a null pointer", r".*: warning: Null pointer argument in"] }, { 'category':'cont.', 'severity':severity.SKIP, 'members':[], 'option':'', 'description':'', 'patterns':[r".*: warning: type defaults to 'int' in declaration of '.+'"] }, Loading Loading @@ -259,7 +304,7 @@ warnpatterns = [ 'patterns':[r".*: warning: attempt to free a non-heap object '.+'"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wchar-subscripts', 'description':'Array subscript has type char', 'patterns':[r".*: warning: array subscript has type 'char'"] }, 'patterns':[r".*: warning: array subscript .+ type 'char'.+Wchar-subscripts"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Constant too large for type', 'patterns':[r".*: warning: integer constant is too large for '.+' type"] }, Loading Loading @@ -307,7 +352,8 @@ warnpatterns = [ 'patterns':[r".*: warning: function declaration isn't a prototype"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wignored-qualifiers', 'description':'Type qualifiers ignored on function return value', 'patterns':[r".*: warning: type qualifiers ignored on function return type"] }, 'patterns':[r".*: warning: type qualifiers ignored on function return type", r".*: warning: .+ type qualifier .+ has no effect .+Wignored-qualifiers"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'<foo> declared inside parameter list, scope limited to this definition', 'patterns':[r".*: warning: '.+' declared inside parameter list"] }, Loading @@ -320,12 +366,21 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'-Wcomment', 'description':'Comment inside comment', 'patterns':[r".*: warning: "".+"" within comment"] }, { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'', 'description':'Value stored is never read', 'patterns':[r".*: warning: Value stored to .+ is never read"] }, { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'-Wdeprecated-declarations', 'description':'Deprecated declarations', 'patterns':[r".*: warning: .+ is deprecated.+deprecated-declarations"] }, { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'-Wpointer-sign', 'description':'Converts between pointers to integer types with different sign', 'patterns':[r".*: warning: .+ converts between pointers to integer types with different sign"] }, { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'', 'description':'Extra tokens after #endif', 'patterns':[r".*: warning: extra tokens at end of #endif directive"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wenum-compare', 'description':'Comparison between different enums', 'patterns':[r".*: warning: comparison between 'enum .+' and 'enum .+'"] }, 'patterns':[r".*: warning: comparison between '.+' and '.+'.+Wenum-compare"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wconversion', 'description':'Implicit conversion of negative number to unsigned type', 'patterns':[r".*: warning: converting negative value '.+' to '.+'"] }, Loading @@ -345,6 +400,7 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wpointer-arith', 'description':'void* used in arithmetic' , 'patterns':[r".*: warning: pointer of type 'void \*' used in (arithmetic|subtraction)", r".*: warning: arithmetic on .+ to void is a GNU extension.*Wpointer-arith", r".*: warning: wrong type argument to increment"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wsign-promo', 'description':'Overload resolution chose to promote from unsigned or enum to signed type' , Loading @@ -358,24 +414,135 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Converting from <type> to <other type>', 'patterns':[r".*: warning: converting to '.+' from '.+'"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'VLA has zero or negative size', 'patterns':[r".*: warning: Declared variable-length array \(VLA\) has .+ size"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Return value from void function', 'patterns':[r".*: warning: 'return' with a value, in function returning void"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'multichar', 'description':'Multi-character character constant', 'patterns':[r".*: warning: multi-character character constant"] }, { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'', 'description':'Useless specifier', 'patterns':[r".*: warning: useless storage class specifier in empty declaration"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'', 'description':'Duplicate logtag', 'patterns':[r".*: warning: tag "".+"" \(None\) duplicated in .+"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'typedef-redefinition', 'description':'Typedef redefinition', 'patterns':[r".*: warning: redefinition of typedef '.+' is a C11 feature"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], '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, 'members':[], 'option':'missing-field-initializers', 'description':'Missing field initializers', 'patterns':[r".*: warning: missing field '.+' initializer"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'missing-braces', 'description':'Missing braces', 'patterns':[r".*: warning: suggest braces around initialization of", r".*: warning: braces around scalar initializer"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'sign-compare', 'description':'Comparison of integers of different signs', 'patterns':[r".*: warning: comparison of integers of different signs.+sign-compare"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], '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, 'members':[], 'option':'initializer-overrides', 'description':'Initializer overrides prior initialization', 'patterns':[r".*: warning: initializer overrides prior initialization of this subobject"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'self-assign', 'description':'Assigning value to self', 'patterns':[r".*: warning: explicitly assigning value of .+ to itself"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], '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 the end of a struct or class"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'tautological-constant-out-of-range-compare', 'description':'Comparison of constant is always false/true', 'patterns':[r".*: comparison of .+ is always .+Wtautological-constant-out-of-range-compare"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'overloaded-virtual', 'description':'Hides overloaded virtual function', 'patterns':[r".*: '.+' hides overloaded virtual function"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'incompatible-pointer-types', 'description':'Incompatible pointer types', 'patterns':[r".*: warning: incompatible pointer types .+Wincompatible-pointer-types"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'asm-operand-widths', 'description':'ASM value size does not match registyer size', 'patterns':[r".*: warning: value size does not match register size specified by the constraint and modifier"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'literal-suffix', 'description':'Needs a space between literal and string macro', 'patterns':[r".*: warning: invalid suffix on literal.+ requires a space .+Wliteral-suffix"] }, { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'#warnings', 'description':'Warnings from #warning', 'patterns':[r".*: warning: .+-W#warnings"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Operator new returns NULL', 'patterns':[r".*: warning: 'operator new' must not return NULL unless it is declared 'throw\(\)' .+"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'NULL used in arithmetic', 'patterns':[r".*: warning: NULL used in arithmetic"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'enum-conversion', 'description':'Implicit conversion from enumeration type', 'patterns':[r".*: warning: implicit conversion from enumeration type '.+'"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'switch', 'description':'case value not in enumerated type', 'patterns':[r".*: warning: case value not in enumerated type '.+'"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Undefined result', 'patterns':[r".*: warning: The result of .+ is undefined", r".*: warning: 'this' pointer cannot be null in well-defined C\+\+ code;", r".*: warning: shifting a negative signed value is undefined"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Division by zero', 'patterns':[r".*: warning: Division by zero"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Use of deprecated method', 'patterns':[r".*: warning: '.+' is deprecated .+"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', '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: 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 .+sometimes-uninitialized", r".*: warning: Assigned value is garbage or undefined"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Result of malloc type incompatible with sizeof operand type', 'patterns':[r".*: warning: Result of '.+' is converted to .+ incompatible with sizeof operand type"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Return value not checked', 'patterns':[r".*: warning: The return value from .+ is not checked"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Possible heap pollution', 'patterns':[r".*: warning: .*Possible heap pollution from .+ type .+"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Allocation size of 0 byte', 'patterns':[r".*: warning: Call to .+ has an allocation size of 0 byte"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Result of malloc type incompatible with sizeof operand type', 'patterns':[r".*: warning: Result of '.+' is converted to .+ incompatible with sizeof operand type"] }, { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'', 'description':'Discarded qualifier from pointer target type', 'patterns':[r".*: warning: .+ discards '.+' qualifier from pointer target type"] }, { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'', 'description':'Use snprintf instead of sprintf', 'patterns':[r".*: warning: .*sprintf is often misused; please use snprintf"] }, { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'', 'description':'Unsupported optimizaton flag', 'patterns':[r".*: warning: optimization flag '.+' is not supported"] }, { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'', '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, 'members':[], 'option':'mismatched-tags', 'description':'Mismatched class vs struct tags', 'patterns':[r".*: warning: '.+' defined as a .+ here but previously declared as a .+mismatched-tags", r".*: warning: .+ was previously declared as a .+mismatched-tags"] }, # 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, 'members':[], 'option':'', Loading