diff --git a/tools/warn.py b/tools/warn.py index b61505b6b4..6324429e45 100755 --- a/tools/warn.py +++ b/tools/warn.py @@ -68,7 +68,8 @@ warnpatterns = [ r".*: warning: ignoring old commands for target .+"] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'-Wimplicit-function-declaration', 'description':'Implicit function declaration', - 'patterns':[r".*: warning: implicit declaration of function .+"] }, + 'patterns':[r".*: warning: implicit declaration of function .+", + r".*: warning: implicitly declaring library function" ] }, { 'category':'C/C++', 'severity':severity.SKIP, 'members':[], 'option':'', 'description':'', 'patterns':[r".*: warning: conflicting types for '.+'"] }, @@ -81,12 +82,16 @@ warnpatterns = [ '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 deallocated", 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':'Use transient memory for control value', + 'patterns':[r".*: warning: .+Using such transient memory for the control value is .*dangerous."] }, { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'', 'description':'Return address of stack memory', 'patterns':[r".*: warning: Address of stack memory .+ returned to caller", @@ -94,7 +99,7 @@ warnpatterns = [ { '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 "] }, + r".*: warning: Call to function '.+' 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"] }, @@ -112,6 +117,9 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'-fno-builtin', 'description':'Incompatible declaration of built in function', 'patterns':[r".*: warning: incompatible implicit declaration of built-in function .+"] }, + { 'category':'C/C++', 'severity':severity.HIGH, 'members':[], 'option':'', + 'description':'Null passed as non-null argument', + 'patterns':[r".*: warning: Null passed to a callee that requires a non-null argument"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wunused-parameter', 'description':'Unused parameter', 'patterns':[r".*: warning: unused parameter '.*'"] }, @@ -131,15 +139,22 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wmissing-field-initializers', 'description':'Missing initializer', 'patterns':[r".*: warning: missing initializer"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wdelete-non-virtual-dtor', + 'description':'Need virtual destructor', + 'patterns':[r".*: warning: delete called .* has virtual functions but non-virtual destructor"] }, { 'category':'cont.', 'severity':severity.SKIP, 'members':[], 'option':'', 'description':'', 'patterns':[r".*: warning: \(near initialization for '.+'\)"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], '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, 'members':[], 'option':'-Wformat', 'description':'Format string does not match arguments', '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: unknown conversion type .* in format", 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"] }, @@ -169,28 +184,52 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'', 'description':'No newline at end of file', 'patterns':[r".*: warning: no newline at end of file"] }, + { 'category':'C/C++', 'severity':severity.HARMLESS, 'members':[], 'option':'', + 'description':'Missing space after macro name', + 'patterns':[r".*: warning: missing whitespace after the macro name"] }, + { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'-Wcast-align', + 'description':'Cast increases required alignment', + 'patterns':[r".*: warning: cast from .* to .* increases required alignment .*"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wcast-qual', 'description':'Qualifier discarded', 'patterns':[r".*: warning: passing argument [0-9]+ of '.+' discards qualifiers from pointer target type", r".*: warning: assignment discards qualifiers from pointer target type", r".*: warning: passing .+ to parameter of type .+ discards qualifiers", r".*: warning: assigning to .+ from .+ discards qualifiers", + r".*: warning: initializing .+ discards qualifiers .+types-discards-qualifiers", r".*: warning: return discards qualifiers from pointer target type"] }, - { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wattributes', + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wunknown-attributes', + 'description':'Unknown attribute', + 'patterns':[r".*: warning: unknown attribute '.+'"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wignored-attributes', 'description':'Attribute ignored', - 'patterns':[r".*: warning: '_*packed_*' attribute ignored"] }, + 'patterns':[r".*: warning: '_*packed_*' attribute ignored", + r".*: warning: attribute declaration must precede definition .+ignored-attributes"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wvisibility', + 'description':'Visibility problem', + 'patterns':[r".*: warning: declaration of '.+' will not be visible outside of this function"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wattributes', 'description':'Visibility mismatch', 'patterns':[r".*: warning: '.+' declared with greater visibility than the type of its field '.+'"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Shift count greater than width of type', 'patterns':[r".*: warning: (left|right) shift count >= width of type"] }, - { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wextern-initializer', 'description':'extern <foo> is initialized', - 'patterns':[r".*: warning: '.+' initialized and declared 'extern'"] }, + 'patterns':[r".*: warning: '.+' initialized and declared 'extern'", + r".*: warning: 'extern' variable has an initializer"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wold-style-declaration', 'description':'Old style declaration', 'patterns':[r".*: warning: 'static' is not at beginning of declaration"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wreturn-type', + 'description':'Missing return value', + 'patterns':[r".*: warning: control reaches end of non-void function"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wimplicit-int', + 'description':'Implicit int type', + 'patterns':[r".*: warning: type specifier missing, defaults to 'int'"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], '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, 'members':[], 'option':'-Wuninitialized', 'description':'Variable may be used uninitialized', 'patterns':[r".*: warning: '.+' may be used uninitialized in this function"] }, @@ -253,7 +292,8 @@ warnpatterns = [ 'patterns':[r".*: warning: dereferencing .* break strict-aliasing rules"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], '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"] }, + 'patterns':[r".*: warning: cast from pointer to integer of different size", + r".*: warning: initialization makes pointer from integer without a cast"] } , { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], '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"] }, @@ -1326,6 +1366,9 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Possible broken line continuation', 'patterns':[r".*: warning: backslash and newline separated by space"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wundefined-inline', + 'description':'Inline function is not defined', + 'patterns':[r".*: warning: inline function '.*' is not defined"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Warray-bounds', 'description':'Array subscript out of bounds', 'patterns':[r".*: warning: array subscript is above array bounds", @@ -1358,6 +1401,9 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], '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, 'members':[], 'option':'-Winteger-overflow', + 'description':'Overflow in expression', + 'patterns':[r".*: warning: overflow in expression; .*Winteger-overflow"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Woverflow', 'description':'Overflow in implicit constant conversion', 'patterns':[r".*: warning: overflow in implicit constant conversion"] }, @@ -1380,18 +1426,31 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wmissing-parameter-type', 'description':'Parameter type not specified', 'patterns':[r".*: warning: type of '.+' defaults to 'int'"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wmissing-declarations', + 'description':'Missing declarations', + 'patterns':[r".*: warning: declaration does not declare anything"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wmissing-noreturn', + 'description':'Missing noreturn', + 'patterns':[r".*: warning: function '.*' could be declared with attribute 'noreturn'"] }, { 'category':'gcc', 'severity':severity.MEDIUM, 'members':[], 'option':'', '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, 'members':[], 'option':'', 'description':'User warning', 'patterns':[r".*: warning: #warning "".+"""] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wvexing-parse', + 'description':'Vexing parsing problem', + 'patterns':[r".*: warning: empty parentheses interpreted as a function declaration"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wextra', 'description':'Dereferencing void*', 'patterns':[r".*: warning: dereferencing 'void \*' pointer"] }, - { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wextra', - 'description':'Comparison of pointer to zero', - 'patterns':[r".*: warning: ordered comparison of pointer with integer zero"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', + '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, 'members':[], 'option':'', + 'description':'Use of error-prone unary operator', + 'patterns':[r".*: warning: use of unary operator that may be intended as compound assignment"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wwrite-strings', 'description':'Conversion of string constant to non-const char*', 'patterns':[r".*: warning: deprecated conversion from string constant to '.+'"] }, @@ -1433,8 +1492,21 @@ warnpatterns = [ 'description':'Comparison between different enums', '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 '.+'"] }, + 'description':'Conversion may change value', + 'patterns':[r".*: warning: converting negative value '.+' to '.+'", + r".*: warning: conversion to '.+' .+ may alter its value"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], '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, 'members':[], '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, 'members':[], 'option':'-Wnon-literal-null-conversion', + 'description':'Zero used as null pointer', + 'patterns':[r".*: warning: expression .* zero treated as a null pointer constant"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wliteral-conversion', + 'description':'Implicit conversion changes value', + 'patterns':[r".*: warning: implicit conversion .* changes value from .* to .*literal-conversion"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Passing NULL as non-pointer argument', 'patterns':[r".*: warning: passing NULL to non-pointer argument [0-9]+ of '.+'"] }, @@ -1480,6 +1552,9 @@ warnpatterns = [ { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'writable-strings', 'description':'Conversion from string literal to char*', 'patterns':[r".*: warning: .+ does not allow conversion from string literal to 'char \*'"] }, + { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'-Wextra-semi', + 'description':'Extra \';\'', + 'patterns':[r".*: warning: extra ';' .+extra-semi"] }, { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'', 'description':'Useless specifier', 'patterns':[r".*: warning: useless storage class specifier in empty declaration"] }, @@ -1530,6 +1605,12 @@ warnpatterns = [ { 'category':'logtags', 'severity':severity.LOW, 'members':[], 'option':'asm-operand-widths', 'description':'ASM value size does not match register size', 'patterns':[r".*: warning: value size does not match register size specified by the constraint and modifier"] }, + { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'tautological-compare', + 'description':'Comparison of self is always false', + 'patterns':[r".*: self-comparison always evaluates to false"] }, + { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'constant-logical-operand', + 'description':'Logical op with constant operand', + 'patterns':[r".*: use of logical '.+' with constant operand"] }, { 'category':'C/C++', '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"] }, @@ -1538,7 +1619,11 @@ warnpatterns = [ 'patterns':[r".*: warning: .+-W#warnings"] }, { 'category':'C/C++', 'severity':severity.LOW, 'members':[], 'option':'absolute-value', 'description':'Using float/int absolute value function with int/float argument', - 'patterns':[r".*: warning: using .+ absolute value function .+ when argument is .+ type .+Wabsolute-value"] }, + 'patterns':[r".*: warning: using .+ absolute value function .+ when argument is .+ type .+Wabsolute-value", + r".*: warning: absolute value function '.+' given .+ which may cause truncation .+Wabsolute-value"] }, + { 'category':'C/C++', 'severity':severity.LOW, 'members':[], '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, 'members':[], 'option':'', 'description':'Refers to implicitly defined namespace', 'patterns':[r".*: warning: using directive refers to implicitly-defined namespace .+"] }, @@ -1549,9 +1634,10 @@ warnpatterns = [ { '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':'', + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wnull-arithmetic', 'description':'NULL used in arithmetic', - 'patterns':[r".*: warning: 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, 'members':[], 'option':'header-guard', 'description':'Misspelled header guard', 'patterns':[r".*: warning: '.+' is used as a header guard .+ followed by .+ different macro"] }, @@ -1592,6 +1678,12 @@ warnpatterns = [ { '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':'-Wsizeof-array-argument', + 'description':'Sizeof on array argument', + 'patterns':[r".*: warning: sizeof on array function parameter will return"] }, + { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'-Wsizeof-pointer-memacces', + 'description':'Bad argument size of memory access functions', + 'patterns':[r".*: warning: .+\[-Wsizeof-pointer-memaccess\]"] }, { 'category':'C/C++', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'Return value not checked', 'patterns':[r".*: warning: The return value from .+ is not checked"] },