See include/linux/compiler_attributes.h:
/*
* Add the pseudo keyword 'fallthrough' so case statement blocks
* must end with any of these keywords:
* break;
* fallthrough;
* goto <label>;
* return [expression];
*
* gcc: https://gcc.gnu.org/onlinedocs/gcc/Statement-Attributes.html#Statement-Attributes
*/
-if __has_attribute(__fallthrough__)
- define fallthrough __attribute__((__fallthrough__))
-else
- define fallthrough do {} while (0) /* fallthrough */
-endif
The semi-colon is needed, to prevent the comment being parsed as part of the "if {...}" statement.
The warning looks like this:
seeed-voicecard/wm8960.c: In function ‘wm8960_hw_params’:
seeed-voicecard/wm8960.c:752:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
752 | if ((iface & 0x3) != 0) {
| ^
seeed-voicecard/wm8960.c:757:2: note: here
757 | default:
| ^~~~~~~