[Linux-kernel-mentees] checkpatch.pl investigation: MULTISTATEMENT_MACRO_USE_DO_WHILE issues

Lukas Bulwahn lukas.bulwahn at gmail.com
Mon Sep 28 16:14:31 UTC 2020



On Mon, 28 Sep 2020, Dwaipayan Ray wrote:

> Hi,
> Checkpatch seems to generate some false positives on
> certain macros.
> 
> For example running checkpatch on (kernel/trace/trace_export.c),
> 
> ERROR: Macros with multiple statements should be enclosed in a do - while loop
> #49: FILE: kernel/trace/trace_export.c:49:
> +#define __field_packed(type, container, item) type item;
> 
> ERROR: Macros with multiple statements should be enclosed in a do - while loop
> #52: FILE: kernel/trace/trace_export.c:52:
> +#define __array(type, item, size) type item[size];
>

I guess checkpatch.pl detects the semicolon and thinks it must be two 
statements. How about checking if the semicolon is actually followed by 
anything or not?

> and several other same errors.
>

Are they all in one file or spread around in the kernel everywhere?
 
> Wrapping this in a do - while certainly doesn't make sense.
> Removing the semicolon at the end of macro and appending semicolon
> in the call changes the error to:
> 
> ERROR: Macros with complex values should be enclosed in parentheses
> #49: FILE: kernel/trace/trace_export.c:49:
> +#define __array_desc(type, container, item, size) type item[size]
> 
> This seems more reasonable. But the error isn't necessary in the first
> place.
>

Considering format or semantic checks, I would always check if 
the better check can be implemented with clang-format, clang-analyzer or 
coccinelle.

checkpatch.pl is always just a quick heuristics; if other checking tools 
become part of standard check, then we could actually just refer to those 
checking tools instead.


Lukas

> Thanks,
> Dwaipayan.
> 


More information about the Linux-kernel-mentees mailing list