checkpatch: Add --strict test for function pointer calling style
Peter Hurley wrote: The use of older function ptr calling style, (*fn)(), makes static analysis more error-prone; replace with modern fn() style. So make checkpatch emit a --strict test for that condition. Update the unnecessary parentheses test for dereferencing objects at the same time and create a $fix mechanism too. Signed-off-by: Joe Perches <joe@perches.com> Cc: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
e0d975b1b4
commit
ea4acbb11e
@ -3844,9 +3844,27 @@ sub process {
|
|||||||
# ie: &(foo->bar) should be &foo->bar and *(foo->bar) should be *foo->bar
|
# ie: &(foo->bar) should be &foo->bar and *(foo->bar) should be *foo->bar
|
||||||
|
|
||||||
while ($line =~ /(?:[^&]&\s*|\*)\(\s*($Ident\s*(?:$Member\s*)+)\s*\)/g) {
|
while ($line =~ /(?:[^&]&\s*|\*)\(\s*($Ident\s*(?:$Member\s*)+)\s*\)/g) {
|
||||||
CHK("UNNECESSARY_PARENTHESES",
|
my $var = $1;
|
||||||
"Unnecessary parentheses around $1\n" . $herecurr);
|
if (CHK("UNNECESSARY_PARENTHESES",
|
||||||
}
|
"Unnecessary parentheses around $var\n" . $herecurr) &&
|
||||||
|
$fix) {
|
||||||
|
$fixed[$fixlinenr] =~ s/\(\s*\Q$var\E\s*\)/$var/;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# check for unnecessary parentheses around function pointer uses
|
||||||
|
# ie: (foo->bar)(); should be foo->bar();
|
||||||
|
# but not "if (foo->bar) (" to avoid some false positives
|
||||||
|
if ($line =~ /(\bif\s*|)(\(\s*$Ident\s*(?:$Member\s*)+\))[ \t]*\(/ && $1 !~ /^if/) {
|
||||||
|
my $var = $2;
|
||||||
|
if (CHK("UNNECESSARY_PARENTHESES",
|
||||||
|
"Unnecessary parentheses around function pointer $var\n" . $herecurr) &&
|
||||||
|
$fix) {
|
||||||
|
my $var2 = deparenthesize($var);
|
||||||
|
$var2 =~ s/\s//g;
|
||||||
|
$fixed[$fixlinenr] =~ s/\Q$var\E/$var2/;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#goto labels aren't indented, allow a single space however
|
#goto labels aren't indented, allow a single space however
|
||||||
if ($line=~/^.\s+[A-Za-z\d_]+:(?![0-9]+)/ and
|
if ($line=~/^.\s+[A-Za-z\d_]+:(?![0-9]+)/ and
|
||||||
|
Loading…
Reference in New Issue
Block a user