Re: [RESEND PATCH v1] checkpatch: exclude four preprocessor sub-expressions from MACRO_ARG_REUSE

From: Joe Perches
Date: Wed Apr 07 2021 - 13:47:58 EST


On Wed, 2021-04-07 at 19:50 +0900, Vincent Mailhol wrote:
> __must_be_array, offsetof, sizeof_field and __stringify are all
> preprocessor macros and do not evaluate their arguments. As such, it
> is safe not to warn when arguments are being reused in those four
> sub-expressions.
>
> Exclude those so that they can pass checkpatch.
>
> Signed-off-by: Vincent Mailhol <mailhol.vincent@xxxxxxxxxx>

Acked-by: Joe Perches <joe@xxxxxxxxxxx>

> ---
>  scripts/checkpatch.pl | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index df8b23dc1eb0..25ee4fd5b118 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -5736,7 +5736,7 @@ sub process {
>   next if ($arg =~ /\.\.\./);
>   next if ($arg =~ /^type$/i);
>   my $tmp_stmt = $define_stmt;
> - $tmp_stmt =~ s/\b(sizeof|typeof|__typeof__|__builtin\w+|typecheck\s*\(\s*$Type\s*,|\#+)\s*\(*\s*$arg\s*\)*\b//g;
> + $tmp_stmt =~ s/\b(__must_be_array|offsetof|sizeof|sizeof_field|__stringify|typeof|__typeof__|__builtin\w+|typecheck\s*\(\s*$Type\s*,|\#+)\s*\(*\s*$arg\s*\)*\b//g;
>   $tmp_stmt =~ s/\#+\s*$arg\b//g;
>   $tmp_stmt =~ s/\b$arg\s*\#\#//g;
>   my $use_cnt = () = $tmp_stmt =~ /\b$arg\b/g;