checkpatch: Enforce proper do/while (0) style
Use of a loop construct for code that is not intended to repeat does not make much idiomatic sense, except in one place: it is a common usage in macros in order to wrap arbitrary code with single-statement semantics. But when used in a macro, it is more typical for the caller to supply the trailing ';' when calling the macro. Although qemu coding style frowns on bare: if (cond) statement1; else statement2; where extra semicolons actually cause syntax errors, we still want our macro styles to be easily copied to other projects. Thus, declare it an error if we encounter any form of 'while (0)' with a semicolon in the same line. Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <20171201232433.25193-8-eblake@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
2562755ee7
commit
f4bdc13e49
@ -1622,6 +1622,11 @@ sub process {
|
||||
}
|
||||
}
|
||||
|
||||
# 'do ... while (0/false)' only makes sense in macros, without trailing ';'
|
||||
if ($line =~ /while\s*\((0|false)\);/) {
|
||||
ERROR("suspicious ; after while (0)\n" . $herecurr);
|
||||
}
|
||||
|
||||
# Check relative indent for conditionals and blocks.
|
||||
if ($line =~ /\b(?:(?:if|while|for)\s*\(|do\b)/ && $line !~ /^.\s*#/ && $line !~ /\}\s*while\s*/) {
|
||||
my ($s, $c) = ($stat, $cond);
|
||||
|
Loading…
Reference in New Issue
Block a user