A struct with a bool member can have different sizes on various architectures because neither bool size nor alignment is standardized. So emit a message on the use of bool in structs only in .h files and not .c files. There is the real possibility that this test could have a false positive when a bool is declared as an automatic, so limit the test to .h files where the only false positive is for declarations in static inline functions.
Showing the changes to scripts/checkpatch.pl (1 of 1 file). Show all
Unified · Split
| @@ -6251,6 +6251,13 @@ sub process { · 6250 unmodified lines | ||
| 6251 | 6251 | "Avoid using bool as bitfield. Prefer bool bitfields as unsigned int or u<8|16|32>\n" . $herecurr); |
| 6252 | 6252 | } |
| 6253 | 6253 | |
| 6254 | +# check for bool use in .h files | |
| 6255 | + if ($realfile =~ /\.h$/ && | |
| 6256 | + $sline =~ /^.\s+bool\s*$Ident\s*(?::\s*d+\s*)?;/) { | |
| 6257 | + CHK("BOOL_MEMBER", | |
| 6258 | + "Avoid using bool structure members because of possible alignment issues - see: https://lkml.org/lkml/2017/11/21/384\n" . $herecurr); | |
| 6259 | + } | |
| 6260 | + | |
| 6254 | 6261 | # check for semaphores initialized locked |
| 6255 | 6262 | if ($line =~ /^.\s*sema_init.+,\W?0\W?\)/) { |
| 6256 | 6263 | WARN("CONSIDER_COMPLETION", |