Eric Blake <ebl...@redhat.com> writes: > On 11/30/2017 08:01 AM, Eric Blake wrote: >> while (0) is only idiomatic in a macro definition, where the caller >> will be supplying the trailing ';'. Warn if the macro has a duplicate. >> >> Signed-off-by: Eric Blake <ebl...@redhat.com> >> --- >> scripts/checkpatch.pl | 5 +++++ >> 1 file changed, 5 insertions(+) >> >> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl >> index 34df753571..acb66bff34 100755 >> --- a/scripts/checkpatch.pl >> +++ b/scripts/checkpatch.pl >> @@ -1622,6 +1622,11 @@ sub process { >> } >> } >> >> +# 'while (0);' is odd; only macros should use while (0), without trailing ; >> + if ($line =~ /while\s*\(0\);/) { > > Should this also check for uses of 'while (false);' ?
Do we think it's likely to occur? > Interestingly enough, we have an instance of 'do/while (false);' in > tests/vhost-user-bridge.c that is NOT in a macro, but is used for the > convenience of being able to 'break;' out early rather than using a > goto. Similarly for chardev/char-serial.c using 'while (0);' outside > of a macro. That "cure" merely adds gratuitous cleverness to the "disease". > Those may be worth rewriting to use goto as separate > patches if we want to restrict ALL use of 'while \((0|false)\);' I'd support that.