macro FALLTHROUGH() is expanded to ((void 0)) in my case, since my clang major number is below 12. However, I wonder why clang not complaint on switch label RC_INTERNAL_APPLY_VAL, because it lacks explicit break as well.
I also tried to add break at the end of the case label : https://git.savannah.gnu.org/cgit/mit-scheme.git/tree/src/microcode/interp.c?id=43ea2feb108135921eea80228c9797e95676209e#n1086 The error message remains the same as mentioned above. Adding __attribute__((fallthrough)); at the same place, the output is slightly different: interp.c:831:5: error: unannotated fall-through between switch labels [-Werror,-Wimplicit-fallthrough] case RC_INTERNAL_APPLY: ^ interp.c:831:5: note: insert '__attribute__((fallthrough));' to silence this warning case RC_INTERNAL_APPLY: ^ __attribute__((fallthrough)); interp.c:831:5: note: insert 'break;' to avoid fall-through case RC_INTERNAL_APPLY: ^ break; error: fallthrough annotation in unreachable code [-Werror,-Wimplicit-fallthrough] 2 errors generated. *** Error code 1 I also tried add this annotation at some other places within the switch case, but no success. On Thu, Feb 4, 2021 at 1:34 PM Taylor R Campbell <campb...@mumble.net> wrote: > > > Date: Thu, 4 Feb 2021 13:14:27 +0800 > > From: Lingyu Zhu <lynus...@gmail.com> > > > > It seems the label should be added with a break or an annotation to > > shut up the compiler. > > That's exactly what `FALLTHROUGH ();' on the line above is supposed to > do: > > https://git.savannah.gnu.org/cgit/mit-scheme.git/tree/src/microcode/interp.c?id=43ea2feb108135921eea80228c9797e95676209e#n830 > > Maybe the definition of FALLTHROUGH and ATTRIBUTE in confshared.h > isn't getting picked up by clang? Can you determine which branches of > those #ifs are getting hit on your system and why?