2021-11-14 00:52:28

by Gustavo A. R. Silva

[permalink] [raw]
Subject: [PATCH] kconfig: Add support for -Wimplicit-fallthrough

Add Kconfig support for -Wimplicit-fallthrough for both GCC and Clang.

The compiler option is under configuration CC_IMPLICIT_FALLTHROUGH,
which is enabled by default.

Special thanks to Nathan Chancellor who fixed the Clang bug[1][2]. 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.

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

Link: https://github.com/KSPP/linux/issues/115
Link: https://github.com/ClangBuiltLinux/linux/issues/236
Co-developed-by: Kees Cook <[email protected]>
Signed-off-by: Kees Cook <[email protected]>
Co-developed-by: Linus Torvalds <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Signed-off-by: Gustavo A. R. Silva <[email protected]>
---
Makefile | 6 +-----
init/Kconfig | 5 +++++
2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/Makefile b/Makefile
index 30c7c81d0437..f18a50daad00 100644
--- a/Makefile
+++ b/Makefile
@@ -786,7 +786,7 @@ stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG) := -fstack-protector-strong
KBUILD_CFLAGS += $(stackp-flags-y)

KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror
-KBUILD_CFLAGS += $(KBUILD_CFLAGS-y)
+KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)

ifdef CONFIG_CC_IS_CLANG
KBUILD_CPPFLAGS += -Qunused-arguments
@@ -798,10 +798,6 @@ KBUILD_CFLAGS += -Wno-gnu
KBUILD_CFLAGS += -mno-global-merge
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,)
# gcc inanely warns about local variables called 'main'
KBUILD_CFLAGS += -Wno-main
endif
diff --git a/init/Kconfig b/init/Kconfig
index 11f8a845f259..b0582cd3e096 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -885,6 +885,11 @@ config ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
config CC_HAS_INT128
def_bool !$(cc-option,$(m64-flag) -D__SIZEOF_INT128__=0) && 64BIT

+config CC_IMPLICIT_FALLTHROUGH
+ string
+ default "-Wimplicit-fallthrough=5" if CC_IS_GCC
+ default "-Wimplicit-fallthrough" if CC_IS_CLANG && $(cc-option,-Wunreachable-code-fallthrough)
+
#
# For architectures that know their GCC __int128 support is sound
#
--
2.27.0



2021-11-14 21:20:04

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH] kconfig: Add support for -Wimplicit-fallthrough

On Sat, Nov 13, 2021 at 06:57:25PM -0600, Gustavo A. R. Silva wrote:
> Add Kconfig support for -Wimplicit-fallthrough for both GCC and Clang.
>
> The compiler option is under configuration CC_IMPLICIT_FALLTHROUGH,
> which is enabled by default.
>
> Special thanks to Nathan Chancellor who fixed the Clang bug[1][2]. 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.
>
> 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
>
> Link: https://github.com/KSPP/linux/issues/115
> Link: https://github.com/ClangBuiltLinux/linux/issues/236
> Co-developed-by: Kees Cook <[email protected]>
> Signed-off-by: Kees Cook <[email protected]>
> Co-developed-by: Linus Torvalds <[email protected]>
> Signed-off-by: Linus Torvalds <[email protected]>
> Signed-off-by: Gustavo A. R. Silva <[email protected]>

This appears to do the right thing with both clang-13 and clang-14.

Reviewed-by: Nathan Chancellor <[email protected]>
Tested-by: Nathan Chancellor <[email protected]>

It feels a little odd to have this in Kconfig but if it works and gets
the warning enabled, then so be it.

> ---
> Makefile | 6 +-----
> init/Kconfig | 5 +++++
> 2 files changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 30c7c81d0437..f18a50daad00 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -786,7 +786,7 @@ stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG) := -fstack-protector-strong
> KBUILD_CFLAGS += $(stackp-flags-y)
>
> KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror
> -KBUILD_CFLAGS += $(KBUILD_CFLAGS-y)
> +KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
>
> ifdef CONFIG_CC_IS_CLANG
> KBUILD_CPPFLAGS += -Qunused-arguments
> @@ -798,10 +798,6 @@ KBUILD_CFLAGS += -Wno-gnu
> KBUILD_CFLAGS += -mno-global-merge
> 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,)
> # gcc inanely warns about local variables called 'main'
> KBUILD_CFLAGS += -Wno-main
> endif
> diff --git a/init/Kconfig b/init/Kconfig
> index 11f8a845f259..b0582cd3e096 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -885,6 +885,11 @@ config ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
> config CC_HAS_INT128
> def_bool !$(cc-option,$(m64-flag) -D__SIZEOF_INT128__=0) && 64BIT
>
> +config CC_IMPLICIT_FALLTHROUGH
> + string
> + default "-Wimplicit-fallthrough=5" if CC_IS_GCC
> + default "-Wimplicit-fallthrough" if CC_IS_CLANG && $(cc-option,-Wunreachable-code-fallthrough)
> +
> #
> # For architectures that know their GCC __int128 support is sound
> #
> --
> 2.27.0
>
>

2021-11-14 21:26:16

by Linus Torvalds

[permalink] [raw]
Subject: Re: [PATCH] kconfig: Add support for -Wimplicit-fallthrough

On Sun, Nov 14, 2021 at 1:18 PM Nathan Chancellor <[email protected]> wrote:
>
> It feels a little odd to have this in Kconfig but if it works and gets
> the warning enabled, then so be it.

We've actually been actively moving more and more of the compiler
flags configuration to Kconfig time.

The Kconfig language makes it fairly easy and natural to do these
days, and in some cases the compiler flags end up having a number of
other dependencies (not in this case, but look at things like
CC_HAS_KASAN_GENERIC etc, where the existence of some compiler flag
ends up then also affecting whether other options can be enabled).

So the whole "move it to config time" ends up being the direction
we've been going, and the only really unusual case here is that it
ends up being done as a string config rather than as a boolean.

And that's just because the different compilers also have different
flags in this case ;(

Linus

2021-11-14 21:26:32

by Gustavo A. R. Silva

[permalink] [raw]
Subject: Re: [PATCH] kconfig: Add support for -Wimplicit-fallthrough

On Sun, Nov 14, 2021 at 02:18:41PM -0700, Nathan Chancellor wrote:
> On Sat, Nov 13, 2021 at 06:57:25PM -0600, Gustavo A. R. Silva wrote:
> > Add Kconfig support for -Wimplicit-fallthrough for both GCC and Clang.
> >
> > The compiler option is under configuration CC_IMPLICIT_FALLTHROUGH,
> > which is enabled by default.
> >
> > Special thanks to Nathan Chancellor who fixed the Clang bug[1][2]. 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.
> >
> > 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
> >
> > Link: https://github.com/KSPP/linux/issues/115
> > Link: https://github.com/ClangBuiltLinux/linux/issues/236
> > Co-developed-by: Kees Cook <[email protected]>
> > Signed-off-by: Kees Cook <[email protected]>
> > Co-developed-by: Linus Torvalds <[email protected]>
> > Signed-off-by: Linus Torvalds <[email protected]>
> > Signed-off-by: Gustavo A. R. Silva <[email protected]>
>
> This appears to do the right thing with both clang-13 and clang-14.
>
> Reviewed-by: Nathan Chancellor <[email protected]>
> Tested-by: Nathan Chancellor <[email protected]>

Thanks, Nathan.

--
Gustavo

>
> It feels a little odd to have this in Kconfig but if it works and gets
> the warning enabled, then so be it.
>
> > ---
> > Makefile | 6 +-----
> > init/Kconfig | 5 +++++
> > 2 files changed, 6 insertions(+), 5 deletions(-)
> >
> > diff --git a/Makefile b/Makefile
> > index 30c7c81d0437..f18a50daad00 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -786,7 +786,7 @@ stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG) := -fstack-protector-strong
> > KBUILD_CFLAGS += $(stackp-flags-y)
> >
> > KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror
> > -KBUILD_CFLAGS += $(KBUILD_CFLAGS-y)
> > +KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
> >
> > ifdef CONFIG_CC_IS_CLANG
> > KBUILD_CPPFLAGS += -Qunused-arguments
> > @@ -798,10 +798,6 @@ KBUILD_CFLAGS += -Wno-gnu
> > KBUILD_CFLAGS += -mno-global-merge
> > 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,)
> > # gcc inanely warns about local variables called 'main'
> > KBUILD_CFLAGS += -Wno-main
> > endif
> > diff --git a/init/Kconfig b/init/Kconfig
> > index 11f8a845f259..b0582cd3e096 100644
> > --- a/init/Kconfig
> > +++ b/init/Kconfig
> > @@ -885,6 +885,11 @@ config ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
> > config CC_HAS_INT128
> > def_bool !$(cc-option,$(m64-flag) -D__SIZEOF_INT128__=0) && 64BIT
> >
> > +config CC_IMPLICIT_FALLTHROUGH
> > + string
> > + default "-Wimplicit-fallthrough=5" if CC_IS_GCC
> > + default "-Wimplicit-fallthrough" if CC_IS_CLANG && $(cc-option,-Wunreachable-code-fallthrough)
> > +
> > #
> > # For architectures that know their GCC __int128 support is sound
> > #
> > --
> > 2.27.0
> >
> >

2021-11-15 00:18:03

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH] kconfig: Add support for -Wimplicit-fallthrough

On Sun, Nov 14, 2021 at 02:18:41PM -0700, Nathan Chancellor wrote:
> On Sat, Nov 13, 2021 at 06:57:25PM -0600, Gustavo A. R. Silva wrote:
> > Add Kconfig support for -Wimplicit-fallthrough for both GCC and Clang.
> >
> > The compiler option is under configuration CC_IMPLICIT_FALLTHROUGH,
> > which is enabled by default.
> >
> > Special thanks to Nathan Chancellor who fixed the Clang bug[1][2]. 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.
> >
> > 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
> >
> > Link: https://github.com/KSPP/linux/issues/115
> > Link: https://github.com/ClangBuiltLinux/linux/issues/236
> > Co-developed-by: Kees Cook <[email protected]>
> > Signed-off-by: Kees Cook <[email protected]>
> > Co-developed-by: Linus Torvalds <[email protected]>
> > Signed-off-by: Linus Torvalds <[email protected]>
> > Signed-off-by: Gustavo A. R. Silva <[email protected]>
>
> This appears to do the right thing with both clang-13 and clang-14.

Now that I gave this a look for the GCC side, I think it is wrong.

-Wimplicit-fallthrough=5 was under cc-option because it was only
available in GCC 7.x and newer so the build is now broken for GCC 5.x
and 6.x:

gcc: error: unrecognized command line option '-Wimplicit-fallthrough=5';
did you mean '-Wno-fallthrough'?

I think this needs to be added (I can send a formal patch tomorrow
unless someone wants to beat me to it):

diff --git a/init/Kconfig b/init/Kconfig
index 036b750e8d8a..85882c317235 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -887,7 +887,7 @@ config CC_HAS_INT128

config CC_IMPLICIT_FALLTHROUGH
string
- default "-Wimplicit-fallthrough=5" if CC_IS_GCC
+ default "-Wimplicit-fallthrough=5" if $(cc-option,-Wimplicit-fallthrough=5)
default "-Wimplicit-fallthrough" if CC_IS_CLANG && $(cc-option,-Wunreachable-code-fallthrough)

#

Cheers,
Nathan

> Reviewed-by: Nathan Chancellor <[email protected]>
> Tested-by: Nathan Chancellor <[email protected]>
>
> It feels a little odd to have this in Kconfig but if it works and gets
> the warning enabled, then so be it.
>
> > ---
> > Makefile | 6 +-----
> > init/Kconfig | 5 +++++
> > 2 files changed, 6 insertions(+), 5 deletions(-)
> >
> > diff --git a/Makefile b/Makefile
> > index 30c7c81d0437..f18a50daad00 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -786,7 +786,7 @@ stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG) := -fstack-protector-strong
> > KBUILD_CFLAGS += $(stackp-flags-y)
> >
> > KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror
> > -KBUILD_CFLAGS += $(KBUILD_CFLAGS-y)
> > +KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
> >
> > ifdef CONFIG_CC_IS_CLANG
> > KBUILD_CPPFLAGS += -Qunused-arguments
> > @@ -798,10 +798,6 @@ KBUILD_CFLAGS += -Wno-gnu
> > KBUILD_CFLAGS += -mno-global-merge
> > 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,)
> > # gcc inanely warns about local variables called 'main'
> > KBUILD_CFLAGS += -Wno-main
> > endif
> > diff --git a/init/Kconfig b/init/Kconfig
> > index 11f8a845f259..b0582cd3e096 100644
> > --- a/init/Kconfig
> > +++ b/init/Kconfig
> > @@ -885,6 +885,11 @@ config ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
> > config CC_HAS_INT128
> > def_bool !$(cc-option,$(m64-flag) -D__SIZEOF_INT128__=0) && 64BIT
> >
> > +config CC_IMPLICIT_FALLTHROUGH
> > + string
> > + default "-Wimplicit-fallthrough=5" if CC_IS_GCC
> > + default "-Wimplicit-fallthrough" if CC_IS_CLANG && $(cc-option,-Wunreachable-code-fallthrough)
> > +
> > #
> > # For architectures that know their GCC __int128 support is sound
> > #
> > --
> > 2.27.0
> >
> >
>

2021-11-15 00:30:15

by Gustavo A. R. Silva

[permalink] [raw]
Subject: Re: [PATCH] kconfig: Add support for -Wimplicit-fallthrough

On Sun, Nov 14, 2021 at 05:17:51PM -0700, Nathan Chancellor wrote:
> On Sun, Nov 14, 2021 at 02:18:41PM -0700, Nathan Chancellor wrote:
> > On Sat, Nov 13, 2021 at 06:57:25PM -0600, Gustavo A. R. Silva wrote:
> > > Add Kconfig support for -Wimplicit-fallthrough for both GCC and Clang.
> > >
> > > The compiler option is under configuration CC_IMPLICIT_FALLTHROUGH,
> > > which is enabled by default.
> > >
> > > Special thanks to Nathan Chancellor who fixed the Clang bug[1][2]. 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.
> > >
> > > 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
> > >
> > > Link: https://github.com/KSPP/linux/issues/115
> > > Link: https://github.com/ClangBuiltLinux/linux/issues/236
> > > Co-developed-by: Kees Cook <[email protected]>
> > > Signed-off-by: Kees Cook <[email protected]>
> > > Co-developed-by: Linus Torvalds <[email protected]>
> > > Signed-off-by: Linus Torvalds <[email protected]>
> > > Signed-off-by: Gustavo A. R. Silva <[email protected]>
> >
> > This appears to do the right thing with both clang-13 and clang-14.
>
> Now that I gave this a look for the GCC side, I think it is wrong.
>
> -Wimplicit-fallthrough=5 was under cc-option because it was only
> available in GCC 7.x and newer so the build is now broken for GCC 5.x
> and 6.x:
>
> gcc: error: unrecognized command line option '-Wimplicit-fallthrough=5';
> did you mean '-Wno-fallthrough'?

I'll send a patch for this right away. Thanks for the report, Nathan! :)

--
Gustavo

>
> I think this needs to be added (I can send a formal patch tomorrow
> unless someone wants to beat me to it):
>
> diff --git a/init/Kconfig b/init/Kconfig
> index 036b750e8d8a..85882c317235 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -887,7 +887,7 @@ config CC_HAS_INT128
>
> config CC_IMPLICIT_FALLTHROUGH
> string
> - default "-Wimplicit-fallthrough=5" if CC_IS_GCC
> + default "-Wimplicit-fallthrough=5" if $(cc-option,-Wimplicit-fallthrough=5)
> default "-Wimplicit-fallthrough" if CC_IS_CLANG && $(cc-option,-Wunreachable-code-fallthrough)
>
> #
>
> Cheers,
> Nathan
>
> > Reviewed-by: Nathan Chancellor <[email protected]>
> > Tested-by: Nathan Chancellor <[email protected]>
> >
> > It feels a little odd to have this in Kconfig but if it works and gets
> > the warning enabled, then so be it.
> >
> > > ---
> > > Makefile | 6 +-----
> > > init/Kconfig | 5 +++++
> > > 2 files changed, 6 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/Makefile b/Makefile
> > > index 30c7c81d0437..f18a50daad00 100644
> > > --- a/Makefile
> > > +++ b/Makefile
> > > @@ -786,7 +786,7 @@ stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG) := -fstack-protector-strong
> > > KBUILD_CFLAGS += $(stackp-flags-y)
> > >
> > > KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror
> > > -KBUILD_CFLAGS += $(KBUILD_CFLAGS-y)
> > > +KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
> > >
> > > ifdef CONFIG_CC_IS_CLANG
> > > KBUILD_CPPFLAGS += -Qunused-arguments
> > > @@ -798,10 +798,6 @@ KBUILD_CFLAGS += -Wno-gnu
> > > KBUILD_CFLAGS += -mno-global-merge
> > > 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,)
> > > # gcc inanely warns about local variables called 'main'
> > > KBUILD_CFLAGS += -Wno-main
> > > endif
> > > diff --git a/init/Kconfig b/init/Kconfig
> > > index 11f8a845f259..b0582cd3e096 100644
> > > --- a/init/Kconfig
> > > +++ b/init/Kconfig
> > > @@ -885,6 +885,11 @@ config ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
> > > config CC_HAS_INT128
> > > def_bool !$(cc-option,$(m64-flag) -D__SIZEOF_INT128__=0) && 64BIT
> > >
> > > +config CC_IMPLICIT_FALLTHROUGH
> > > + string
> > > + default "-Wimplicit-fallthrough=5" if CC_IS_GCC
> > > + default "-Wimplicit-fallthrough" if CC_IS_CLANG && $(cc-option,-Wunreachable-code-fallthrough)
> > > +
> > > #
> > > # For architectures that know their GCC __int128 support is sound
> > > #
> > > --
> > > 2.27.0
> > >
> > >
> >

2021-11-15 00:45:54

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH] kconfig: Add support for -Wimplicit-fallthrough

On Mon, Nov 15, 2021 at 9:30 AM Gustavo A. R. Silva
<[email protected]> wrote:
>
> On Sun, Nov 14, 2021 at 05:17:51PM -0700, Nathan Chancellor wrote:
> > On Sun, Nov 14, 2021 at 02:18:41PM -0700, Nathan Chancellor wrote:
> > > On Sat, Nov 13, 2021 at 06:57:25PM -0600, Gustavo A. R. Silva wrote:
> > > > Add Kconfig support for -Wimplicit-fallthrough for both GCC and Clang.
> > > >
> > > > The compiler option is under configuration CC_IMPLICIT_FALLTHROUGH,
> > > > which is enabled by default.
> > > >
> > > > Special thanks to Nathan Chancellor who fixed the Clang bug[1][2]. 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.
> > > >
> > > > 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
> > > >
> > > > Link: https://github.com/KSPP/linux/issues/115
> > > > Link: https://github.com/ClangBuiltLinux/linux/issues/236
> > > > Co-developed-by: Kees Cook <[email protected]>
> > > > Signed-off-by: Kees Cook <[email protected]>
> > > > Co-developed-by: Linus Torvalds <[email protected]>
> > > > Signed-off-by: Linus Torvalds <[email protected]>
> > > > Signed-off-by: Gustavo A. R. Silva <[email protected]>
> > >
> > > This appears to do the right thing with both clang-13 and clang-14.
> >
> > Now that I gave this a look for the GCC side, I think it is wrong.
> >
> > -Wimplicit-fallthrough=5 was under cc-option because it was only
> > available in GCC 7.x and newer so the build is now broken for GCC 5.x
> > and 6.x:
> >
> > gcc: error: unrecognized command line option '-Wimplicit-fallthrough=5';
> > did you mean '-Wno-fallthrough'?
>
> I'll send a patch for this right away. Thanks for the report, Nathan! :)


Please use a subject prefix different than "kconfig:"

I want to see "kconfig:' only for changes in scripts/kconfig/.



--
Best Regards
Masahiro Yamada

2021-11-15 00:55:21

by Gustavo A. R. Silva

[permalink] [raw]
Subject: Re: [PATCH] kconfig: Add support for -Wimplicit-fallthrough

On Mon, Nov 15, 2021 at 09:44:40AM +0900, Masahiro Yamada wrote:
> On Mon, Nov 15, 2021 at 9:30 AM Gustavo A. R. Silva
> <[email protected]> wrote:
> >
>
> Please use a subject prefix different than "kconfig:"
>
> I want to see "kconfig:' only for changes in scripts/kconfig/.

How about kbuild for this case, instead?

Thanks
--
Gustavo


2021-11-15 02:18:39

by Masahiro Yamada

[permalink] [raw]
Subject: Re: [PATCH] kconfig: Add support for -Wimplicit-fallthrough

On Mon, Nov 15, 2021 at 9:54 AM Gustavo A. R. Silva
<[email protected]> wrote:
>
> On Mon, Nov 15, 2021 at 09:44:40AM +0900, Masahiro Yamada wrote:
> > On Mon, Nov 15, 2021 at 9:30 AM Gustavo A. R. Silva
> > <[email protected]> wrote:
> > >
> >
> > Please use a subject prefix different than "kconfig:"
> >
> > I want to see "kconfig:' only for changes in scripts/kconfig/.
>
> How about kbuild for this case, instead?

Sounds good to me.



--
Best Regards
Masahiro Yamada