From: Gustavo A. R. Silva Date: Tue, 17 Aug 2021 20:33:33 +0000 (-0500) Subject: Makefile: Enable -Wimplicit-fallthrough for Clang X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=7bc04ce6b914a06d5823509d1de237787c58e649;p=users%2Fjedix%2Flinux-maple.git Makefile: Enable -Wimplicit-fallthrough for Clang With the recent fixes for fallthrough warnings, it is now possible to enable -Wimplicit-fallthrough for Clang. Special thanks to Nathan Chancellor who fixed the Clang bug[1][2] that put the application of this patch to a halt, temporarily. This bugfix only appears in Clang 14.0.0, so older versions still contain the bug and -Wimplicit-fallthrough won't be enabled for them, for now. As Masahiro noted, the "ifeq" conditional "will break when Clang version 100.0.0 is released. But, before that, we will raise the minimum supported clang version, and this conditional will go away."[3] This concludes a long journey and now we are finally getting rid of the unintentional fallthrough bug-class in the kernel, entirely. [1] https://github.com/llvm/llvm-project/commit/9ed4a94d6451046a51ef393cd62f00710820a7e8 [2] https://bugs.llvm.org/show_bug.cgi?id=51094 [3] https://lore.kernel.org/lkml/CAK7LNAQFgYgavTP2ZG9Y16XBVdPuJ98J_Ty1OrQy1GXHq6JjQQ@mail.gmail.com/ Link: https://github.com/KSPP/linux/issues/115 Link: https://github.com/ClangBuiltLinux/linux/issues/236 ["firstword" and "sort" was idea of Masahiro] Suggested-by: Masahiro Yamada [The conditional "ifeq" was idea of Nathan] Suggested-by: Nathan Chancellor Reviewed-by: Nathan Chancellor Tested-by: Nathan Chancellor Co-developed-by: Kees Cook Signed-off-by: Kees Cook Signed-off-by: Gustavo A. R. Silva --- diff --git a/Makefile b/Makefile index c19d1638da25c..06a228892e4e8 100644 --- a/Makefile +++ b/Makefile @@ -797,11 +797,17 @@ KBUILD_CFLAGS += -Wno-gnu # source of a reference will be _MergedGlobals and not on of the whitelisted names. # See modpost pattern 2 KBUILD_CFLAGS += -mno-global-merge + +# Warn about unmarked fall-throughs in switch statement. +# Clang prior to 14.0.0 warned on unreachable fallthroughs with +# -Wimplicit-fallthrough, which is unacceptable due to IS_ENABLED(). +# https://bugs.llvm.org/show_bug.cgi?id=51094 +ifeq ($(firstword $(sort $(CONFIG_CLANG_VERSION) 140000)),140000) +KBUILD_CFLAGS += -Wimplicit-fallthrough +endif else # Warn about unmarked fall-throughs in switch statement. -# Disabled for clang while comment to attribute conversion happens and -# https://github.com/ClangBuiltLinux/linux/issues/636 is discussed. KBUILD_CFLAGS += $(call cc-option,-Wimplicit-fallthrough=5,) endif