checkpatch: update checkpatch to latest from upstream
Update to commit 6b10df4257367dd0ead49f88df473972c00a8b5c from the Linux kernel, relevant changes since last update: - checkpatch: fix a number of COMPLEX_MACRO false positives - checkpatch: improve macros with flow control test - checkpatch: warn when casting constants to c90 int or longer types - checkpatch: improve the unnecessary initialisers tests - checkpatch: improve tests for fixes:, long lines and stack dumps in commit log Change-Id: Ic4f8d925cd7c076e18eb2f2841913be61239aac2 Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This commit is contained in:
parent
0e4538da10
commit
76b0913a33
|
@ -370,6 +370,8 @@ our $typeTypedefs = qr{(?x:
|
|||
$typeKernelTypedefs\b
|
||||
)};
|
||||
|
||||
our $zero_initializer = qr{(?:(?:0[xX])?0+$Int_type?|NULL|false)\b};
|
||||
|
||||
our $logFunctions = qr{(?x:
|
||||
printk(?:_ratelimited|_once|)|
|
||||
(?:[a-z0-9]+_){1,2}(?:printk|emerg|alert|crit|err|warning|warn|notice|info|debug|dbg|vdbg|devel|cont|WARN)(?:_ratelimited|_once|)|
|
||||
|
@ -431,6 +433,28 @@ our @typeList = (
|
|||
qr{${Ident}_handler_fn},
|
||||
@typeListMisordered,
|
||||
);
|
||||
|
||||
our $C90_int_types = qr{(?x:
|
||||
long\s+long\s+int\s+(?:un)?signed|
|
||||
long\s+long\s+(?:un)?signed\s+int|
|
||||
long\s+long\s+(?:un)?signed|
|
||||
(?:(?:un)?signed\s+)?long\s+long\s+int|
|
||||
(?:(?:un)?signed\s+)?long\s+long|
|
||||
int\s+long\s+long\s+(?:un)?signed|
|
||||
int\s+(?:(?:un)?signed\s+)?long\s+long|
|
||||
|
||||
long\s+int\s+(?:un)?signed|
|
||||
long\s+(?:un)?signed\s+int|
|
||||
long\s+(?:un)?signed|
|
||||
(?:(?:un)?signed\s+)?long\s+int|
|
||||
(?:(?:un)?signed\s+)?long|
|
||||
int\s+long\s+(?:un)?signed|
|
||||
int\s+(?:(?:un)?signed\s+)?long|
|
||||
|
||||
int\s+(?:un)?signed|
|
||||
(?:(?:un)?signed\s+)?int
|
||||
)};
|
||||
|
||||
our @typeListFile = ();
|
||||
our @typeListWithAttr = (
|
||||
@typeList,
|
||||
|
@ -2313,42 +2337,43 @@ sub process {
|
|||
"Remove Gerrit Change-Id's before submitting upstream.\n" . $herecurr);
|
||||
}
|
||||
|
||||
# Check if the commit log is in a possible stack dump
|
||||
if ($in_commit_log && !$commit_log_possible_stack_dump &&
|
||||
($line =~ /^\s*(?:WARNING:|BUG:)/ ||
|
||||
$line =~ /^\s*\[\s*\d+\.\d{6,6}\s*\]/ ||
|
||||
# timestamp
|
||||
$line =~ /^\s*\[\<[0-9a-fA-F]{8,}\>\]/)) {
|
||||
# stack dump address
|
||||
$commit_log_possible_stack_dump = 1;
|
||||
}
|
||||
|
||||
# Check for line lengths > 75 in commit log, warn once
|
||||
if ($in_commit_log && !$commit_log_long_line &&
|
||||
length($line) > 75 &&
|
||||
!($line =~ /^\s*[a-zA-Z0-9_\/\.]+\s+\|\s+\d+/ ||
|
||||
# file delta changes
|
||||
$line =~ /^\s*(?:[\w\.\-]+\/)++[\w\.\-]+:/ ||
|
||||
# filename then :
|
||||
$line =~ /^\s*(?:Fixes:|Link:)/i ||
|
||||
# A Fixes: or Link: line
|
||||
$commit_log_possible_stack_dump)) {
|
||||
length($line) > 75 &&
|
||||
!($line =~ /^\s*[a-zA-Z0-9_\/\.]+\s+\|\s+\d+/ ||
|
||||
# file delta changes
|
||||
$line =~ /^\s*(?:[\w\.\-]+\/)++[\w\.\-]+:/ ||
|
||||
# filename then :
|
||||
$line =~ /^\s*(?:Fixes:|Link:)/i ||
|
||||
# A Fixes: or Link: line
|
||||
$commit_log_possible_stack_dump)) {
|
||||
WARN("COMMIT_LOG_LONG_LINE",
|
||||
"Possible unwrapped commit description (prefer a maximum 75 chars per line)\n" . $herecurr);
|
||||
$commit_log_long_line = 1;
|
||||
}
|
||||
|
||||
# Check if the commit log is in a possible stack dump
|
||||
if ($in_commit_log && !$commit_log_possible_stack_dump &&
|
||||
($line =~ /^\s*(?:WARNING:|BUG:)/ ||
|
||||
$line =~ /^\s*\[\s*\d+\.\d{6,6}\s*\]/ ||
|
||||
# timestamp
|
||||
$line =~ /^\s*\[\<[0-9a-fA-F]{8,}\>\]/)) {
|
||||
# stack dump address
|
||||
$commit_log_possible_stack_dump = 1;
|
||||
}
|
||||
|
||||
# Reset possible stack dump if a blank line is found
|
||||
if ($in_commit_log && $commit_log_possible_stack_dump &&
|
||||
$line =~ /^\s*$/) {
|
||||
$commit_log_possible_stack_dump = 0;
|
||||
}
|
||||
if ($in_commit_log && $commit_log_possible_stack_dump &&
|
||||
$line =~ /^\s*$/) {
|
||||
$commit_log_possible_stack_dump = 0;
|
||||
}
|
||||
|
||||
# Check for git id commit length and improperly formed commit descriptions
|
||||
if ($in_commit_log &&
|
||||
if ($in_commit_log && !$commit_log_possible_stack_dump &&
|
||||
($line =~ /\bcommit\s+[0-9a-f]{5,}\b/i ||
|
||||
($line =~ /\b[0-9a-f]{12,40}\b/i &&
|
||||
$line !~ /\bfixes:\s*[0-9a-f]{12,40}/i))) {
|
||||
($line =~ /\b[0-9a-f]{12,40}\b/i &&
|
||||
$line !~ /[\<\[][0-9a-f]{12,40}[\>\]]/i &&
|
||||
$line !~ /\bfixes:\s*[0-9a-f]{12,40}/i))) {
|
||||
my $init_char = "c";
|
||||
my $orig_commit = "";
|
||||
my $short = 1;
|
||||
|
@ -3333,21 +3358,20 @@ sub process {
|
|||
}
|
||||
|
||||
# check for global initialisers.
|
||||
if ($line =~ /^\+$Type\s*$Ident(?:\s+$Modifier)*\s*=\s*(?:0|NULL|false)\s*;/) {
|
||||
if ($line =~ /^\+$Type\s*$Ident(?:\s+$Modifier)*\s*=\s*($zero_initializer)\s*;/) {
|
||||
if (ERROR("GLOBAL_INITIALISERS",
|
||||
"do not initialise globals to 0 or NULL\n" .
|
||||
$herecurr) &&
|
||||
"do not initialise globals to $1\n" . $herecurr) &&
|
||||
$fix) {
|
||||
$fixed[$fixlinenr] =~ s/(^.$Type\s*$Ident(?:\s+$Modifier)*)\s*=\s*(0|NULL|false)\s*;/$1;/;
|
||||
$fixed[$fixlinenr] =~ s/(^.$Type\s*$Ident(?:\s+$Modifier)*)\s*=\s*$zero_initializer\s*;/$1;/;
|
||||
}
|
||||
}
|
||||
# check for static initialisers.
|
||||
if ($line =~ /^\+.*\bstatic\s.*=\s*(0|NULL|false)\s*;/) {
|
||||
if ($line =~ /^\+.*\bstatic\s.*=\s*($zero_initializer)\s*;/) {
|
||||
if (ERROR("INITIALISED_STATIC",
|
||||
"do not initialise statics to 0 or NULL\n" .
|
||||
"do not initialise statics to $1\n" .
|
||||
$herecurr) &&
|
||||
$fix) {
|
||||
$fixed[$fixlinenr] =~ s/(\bstatic\s.*?)\s*=\s*(0|NULL|false)\s*;/$1;/;
|
||||
$fixed[$fixlinenr] =~ s/(\bstatic\s.*?)\s*=\s*$zero_initializer\s*;/$1;/;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4516,7 +4540,7 @@ sub process {
|
|||
#print "LINE<$lines[$ln-1]> len<" . length($lines[$ln-1]) . "\n";
|
||||
|
||||
$has_flow_statement = 1 if ($ctx =~ /\b(goto|return)\b/);
|
||||
$has_arg_concat = 1 if ($ctx =~ /\#\#/);
|
||||
$has_arg_concat = 1 if ($ctx =~ /\#\#/ && $ctx !~ /\#\#\s*(?:__VA_ARGS__|args)\b/);
|
||||
|
||||
$dstat =~ s/^.\s*\#\s*define\s+$Ident(?:\([^\)]*\))?\s*//;
|
||||
$dstat =~ s/$;//g;
|
||||
|
@ -4527,7 +4551,7 @@ sub process {
|
|||
# Flatten any parentheses and braces
|
||||
while ($dstat =~ s/\([^\(\)]*\)/1/ ||
|
||||
$dstat =~ s/\{[^\{\}]*\}/1/ ||
|
||||
$dstat =~ s/\[[^\[\]]*\]/1/)
|
||||
$dstat =~ s/.\[[^\[\]]*\]/1/)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -4547,7 +4571,8 @@ sub process {
|
|||
union|
|
||||
struct|
|
||||
\.$Ident\s*=\s*|
|
||||
^\"|\"$
|
||||
^\"|\"$|
|
||||
^\[
|
||||
}x;
|
||||
#print "REST<$rest> dstat<$dstat> ctx<$ctx>\n";
|
||||
if ($dstat ne '' &&
|
||||
|
@ -5115,13 +5140,44 @@ sub process {
|
|||
}
|
||||
}
|
||||
# check for memory barriers without a comment.
|
||||
if ($line =~ /\b(mb|rmb|wmb|read_barrier_depends|smp_mb|smp_rmb|smp_wmb|smp_read_barrier_depends)\(/) {
|
||||
|
||||
my $barriers = qr{
|
||||
mb|
|
||||
rmb|
|
||||
wmb|
|
||||
read_barrier_depends
|
||||
}x;
|
||||
my $barrier_stems = qr{
|
||||
mb__before_atomic|
|
||||
mb__after_atomic|
|
||||
store_release|
|
||||
load_acquire|
|
||||
store_mb|
|
||||
(?:$barriers)
|
||||
}x;
|
||||
my $all_barriers = qr{
|
||||
(?:$barriers)|
|
||||
smp_(?:$barrier_stems)|
|
||||
virt_(?:$barrier_stems)
|
||||
}x;
|
||||
|
||||
if ($line =~ /\b(?:$all_barriers)\s*\(/) {
|
||||
if (!ctx_has_comment($first_line, $linenr)) {
|
||||
WARN("MEMORY_BARRIER",
|
||||
"memory barrier without comment\n" . $herecurr);
|
||||
}
|
||||
}
|
||||
|
||||
my $underscore_smp_barriers = qr{__smp_(?:$barrier_stems)}x;
|
||||
|
||||
if ($realfile !~ m@^include/asm-generic/@ &&
|
||||
$realfile !~ m@/barrier\.h$@ &&
|
||||
$line =~ m/\b(?:$underscore_smp_barriers)\s*\(/ &&
|
||||
$line !~ m/^.\s*\#\s*define\s+(?:$underscore_smp_barriers)\s*\(/) {
|
||||
WARN("MEMORY_BARRIER",
|
||||
"__smp memory barriers shouldn't be used outside barrier.h and asm-generic\n" . $herecurr);
|
||||
}
|
||||
|
||||
# check for waitqueue_active without a comment.
|
||||
if ($line =~ /\bwaitqueue_active\s*\(/) {
|
||||
if (!ctx_has_comment($first_line, $linenr)) {
|
||||
|
@ -5240,6 +5296,26 @@ sub process {
|
|||
}
|
||||
}
|
||||
|
||||
# check for cast of C90 native int or longer types constants
|
||||
if ($line =~ /(\(\s*$C90_int_types\s*\)\s*)($Constant)\b/) {
|
||||
my $cast = $1;
|
||||
my $const = $2;
|
||||
if (WARN("TYPECAST_INT_CONSTANT",
|
||||
"Unnecessary typecast of c90 int constant\n" . $herecurr) &&
|
||||
$fix) {
|
||||
my $suffix = "";
|
||||
my $newconst = $const;
|
||||
$newconst =~ s/${Int_type}$//;
|
||||
$suffix .= 'U' if ($cast =~ /\bunsigned\b/);
|
||||
if ($cast =~ /\blong\s+long\b/) {
|
||||
$suffix .= 'LL';
|
||||
} elsif ($cast =~ /\blong\b/) {
|
||||
$suffix .= 'L';
|
||||
}
|
||||
$fixed[$fixlinenr] =~ s/\Q$cast\E$const\b/$newconst$suffix/;
|
||||
}
|
||||
}
|
||||
|
||||
# check for sizeof(&)
|
||||
if ($line =~ /\bsizeof\s*\(\s*\&/) {
|
||||
WARN("SIZEOF_ADDRESS",
|
||||
|
|
Loading…
Reference in a new issue