From: Peter Hurley <peter@hurleysoftware.com>
To: Joe Perches <joe@perches.com>, Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] checkpatch: Add --strict test for function pointer calling style
Date: Wed, 05 Nov 2014 14:12:55 -0500 [thread overview]
Message-ID: <545A76B7.1060801@hurleysoftware.com> (raw)
In-Reply-To: <1415212917.6634.17.camel@perches.com>
On 11/05/2014 01:41 PM, Joe Perches wrote:
> 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.
Cool.
perl's not my thing; how does it know not to trip up on
initcall_t *call;
(*call)();
[which I verified it properly does not flag in drivers/tty/tty_io.c]
Regards,
Peter Hurley
> Signed-off-by: Joe Perches <joe@perches.com>
> ---
> scripts/checkpatch.pl | 24 +++++++++++++++++++++---
> 1 file changed, 21 insertions(+), 3 deletions(-)
>
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index 24d6702..552e5dd 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -3838,9 +3838,27 @@ sub process {
> # ie: &(foo->bar) should be &foo->bar and *(foo->bar) should be *foo->bar
>
> while ($line =~ /(?:[^&]&\s*|\*)\(\s*($Ident\s*(?:$Member\s*)+)\s*\)/g) {
> - CHK("UNNECESSARY_PARENTHESES",
> - "Unnecessary parentheses around $1\n" . $herecurr);
> - }
> + my $var = $1;
> + 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
> if ($line=~/^.\s+[A-Za-z\d_]+:(?![0-9]+)/ and
>
>
next prev parent reply other threads:[~2014-11-05 19:13 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-05 17:26 [PATCH -next 0/9] various tty cleanups Peter Hurley
2014-11-05 17:26 ` [PATCH -next 1/9] tty: Replace open-coded test with tty_hung_up_p() Peter Hurley
2014-11-05 17:26 ` [PATCH -next 2/9] tty: Call methods in modern style Peter Hurley
2014-11-05 18:41 ` [PATCH] checkpatch: Add --strict test for function pointer calling style Joe Perches
2014-11-05 19:12 ` Peter Hurley [this message]
2014-11-05 19:30 ` Joe Perches
2014-11-05 17:26 ` [PATCH -next 3/9] tty: Remove defunct pcxe_open() declaration Peter Hurley
2014-11-05 17:26 ` [PATCH -next 4/9] tty: Remove defunct serial_console_init() declaration Peter Hurley
2014-11-05 17:26 ` [PATCH -next 5/9] serial: hp300: Remove obsolete comments Peter Hurley
2014-11-05 18:36 ` Geert Uytterhoeven
2014-11-05 17:26 ` [PATCH -next 6/9] cris: Remove obsolete ASYNC_SPLIT_TERMIOS behavior Peter Hurley
2014-11-06 8:23 ` Jesper Nilsson
2014-11-05 17:26 ` [PATCH -next 7/9] tty: Document defunct ASYNC_SPLIT_TERMIOS flag in uapi header Peter Hurley
2014-11-05 17:26 ` [PATCH -next 8/9] vt: Remove vt_get_kmsg_redirect() from " Peter Hurley
2014-11-05 17:26 ` [PATCH -next 9/9] serial: 8250_em: Remove out-of-memory message Peter Hurley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=545A76B7.1060801@hurleysoftware.com \
--to=peter@hurleysoftware.com \
--cc=akpm@linux-foundation.org \
--cc=joe@perches.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).