https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93894
--- Comment #2 from Dmitry G. Dyachenko <dimhen at gmail dot com> --- `unsigned' changes nothing $ cat xxu.i int f1(int j, unsigned k) { switch (j) { case 0: switch (k % 2) { case 0: return 0; case 1: return 1; } // return 3; // uncomment to fix warning default: return 2; } } $ gcc -fpreprocessed -Wimplicit-fallthrough=2 -Og -c xxu.i xx.i: In function ‘f1’: xx.i:5:2: warning: this statement may fall through [-Wimplicit-fallthrough=] 5 | switch (k % 2) { | ^~~~~~ xx.i:12:5: note: here 12 | default: | ^~~~~~~