linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Joe Perches <joe@perches.com>
To: Dwaipayan Ray <dwaipayanray1@gmail.com>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org,
	linux-kernel-mentees@lists.linuxfoundation.org,
	lukas.bulwahn@gmail.com, Andy Whitcroft <apw@canonical.com>
Subject: Re: [PATCH] checkpatch: fix multi-statement macro checks for while blocks.
Date: Thu, 01 Oct 2020 10:25:04 -0700	[thread overview]
Message-ID: <c5e3b0067f32bc16f90390c51162b47f257935ac.camel@perches.com> (raw)
In-Reply-To: <20201001171903.312021-1-dwaipayanray1@gmail.com>

On Thu, 2020-10-01 at 22:49 +0530, Dwaipayan Ray wrote:
> Checkpatch.pl doesn't have a check for excluding while (...) {...}
> blocks from MULTISTATEMENT_MACRO_USE_DO_WHILE error.
> 
> For example, running checkpatch.pl on the file mm/maccess.c in the
> kernel generates the following error:
> 
> ERROR: Macros with complex values should be enclosed in parentheses
> +#define copy_from_kernel_nofault_loop(dst, src, len, type, err_label)  \
> +       while (len >= sizeof(type)) {                                   \
> +               __get_kernel_nofault(dst, src, type, err_label);        \
> +               dst += sizeof(type);                                    \
> +               src += sizeof(type);                                    \
> +               len -= sizeof(type);                                    \
> +       }
> 
> The error is misleading for this case. Enclosing it in parentheses
> doesn't make any sense.
> 
> Checkpatch already has an exception list for such common macro types.
> Added a new exception for while (...) {...} style blocks to the same.
> 
> In addition, the brace flatten logic was modified by changing the
> substitution characters from "1" to "1u". This was done to ensure that
> macros in the form "#define foo(bar) while(bar){bar--;}" were also
> correctly procecssed.
> 
> Link: https://lore.kernel.org/linux-kernel-mentees/dc985938aa3986702815a0bd68dfca8a03c85447.camel@perches.com/
> 
> Suggested-by: Joe Perches <joe@perches.com>
> Signed-off-by: Dwaipayan Ray <dwaipayanray1@gmail.com>

Thanks.  Andrew, can you pick this up please?

> ---
>  scripts/checkpatch.pl | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index 9e65d21456f1..31624bbb342e 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -5299,9 +5299,9 @@ sub process {
>  			$dstat =~ s/\s*$//s;
>  
>  			# Flatten any parentheses and braces
> -			while ($dstat =~ s/\([^\(\)]*\)/1/ ||
> -			       $dstat =~ s/\{[^\{\}]*\}/1/ ||
> -			       $dstat =~ s/.\[[^\[\]]*\]/1/)
> +			while ($dstat =~ s/\([^\(\)]*\)/1u/ ||
> +			       $dstat =~ s/\{[^\{\}]*\}/1u/ ||
> +			       $dstat =~ s/.\[[^\[\]]*\]/1u/)
>  			{
>  			}
>  
> @@ -5342,6 +5342,7 @@ sub process {
>  			    $dstat !~ /^\.$Ident\s*=/ &&				# .foo =
>  			    $dstat !~ /^(?:\#\s*$Ident|\#\s*$Constant)\s*$/ &&		# stringification #foo
>  			    $dstat !~ /^do\s*$Constant\s*while\s*$Constant;?$/ &&	# do {...} while (...); // do {...} while (...)
> +			    $dstat !~ /^while\s*$Constant\s*$Constant\s*$/ &&		# while (...) {...}
>  			    $dstat !~ /^for\s*$Constant$/ &&				# for (...)
>  			    $dstat !~ /^for\s*$Constant\s+(?:$Ident|-?$Constant)$/ &&	# for (...) bar()
>  			    $dstat !~ /^do\s*{/ &&					# do {...


      reply	other threads:[~2020-10-01 17:25 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-01 17:19 [PATCH] checkpatch: fix multi-statement macro checks for while blocks Dwaipayan Ray
2020-10-01 17:25 ` Joe Perches [this message]

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=c5e3b0067f32bc16f90390c51162b47f257935ac.camel@perches.com \
    --to=joe@perches.com \
    --cc=akpm@linux-foundation.org \
    --cc=apw@canonical.com \
    --cc=dwaipayanray1@gmail.com \
    --cc=linux-kernel-mentees@lists.linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lukas.bulwahn@gmail.com \
    /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).