public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] kbuild: turn on -Wextra by default
       [not found] <20240404151713.3493098-1-arnd@kernel.org>
@ 2024-04-04 15:16 ` Arnd Bergmann
  2024-04-09 16:25   ` Nathan Chancellor
  2024-04-04 15:16 ` [PATCH 2/4] kbuild: remove redundant extra warning flags Arnd Bergmann
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 6+ messages in thread
From: Arnd Bergmann @ 2024-04-04 15:16 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Nathan Chancellor, Nicolas Schier, linux-kbuild, Arnd Bergmann,
	linux-kernel

From: Arnd Bergmann <arnd@arndb.de>

The -Wextra option controls a number of different warnings that differ
slightly by compiler version. Some are useful in general, others are
better left at W=1 or higher. Based on earlier work, the ones that
should be disabled by default are left for the higher warning levels
already, and a lot of the useful ones have no remaining output when
enabled.

Move the -Wextra option up into the set of default-enabled warnings
and just rely on the individual ones getting disabled as needed.

The -Wunused warning was always grouped with this, so turn it on
by default as well, except for the -Wunused-parameter warning that
really has no value at all for the kernel since many interfaces
have intentionally unused arguments.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 scripts/Makefile.extrawarn | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn
index c5af566e911a..c247552c192c 100644
--- a/scripts/Makefile.extrawarn
+++ b/scripts/Makefile.extrawarn
@@ -82,12 +82,14 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init)
 # Warn if there is an enum types mismatch
 KBUILD_CFLAGS += $(call cc-option,-Wenum-conversion)
 
+KBUILD_CFLAGS += -Wextra
+KBUILD_CFLAGS += -Wunused
+
 #
 # W=1 - warnings which may be relevant and do not occur too often
 #
 ifneq ($(findstring 1, $(KBUILD_EXTRA_WARN)),)
 
-KBUILD_CFLAGS += -Wextra -Wunused -Wno-unused-parameter
 KBUILD_CFLAGS += $(call cc-option, -Wrestrict)
 KBUILD_CFLAGS += -Wmissing-format-attribute
 KBUILD_CFLAGS += -Wold-style-definition
@@ -190,6 +192,7 @@ else
 
 # The following turn off the warnings enabled by -Wextra
 KBUILD_CFLAGS += -Wno-sign-compare
+KBUILD_CFLAGS += -Wno-unused-parameter
 
 endif
 
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/4] kbuild: remove redundant extra warning flags
       [not found] <20240404151713.3493098-1-arnd@kernel.org>
  2024-04-04 15:16 ` [PATCH 1/4] kbuild: turn on -Wextra by default Arnd Bergmann
@ 2024-04-04 15:16 ` Arnd Bergmann
  2024-04-04 15:16 ` [PATCH 3/4] kbuild: turn on -Wrestrict by default Arnd Bergmann
  2024-04-04 15:16 ` [PATCH 4/4] kbuild: enable -Wformat-truncation on clang Arnd Bergmann
  3 siblings, 0 replies; 6+ messages in thread
From: Arnd Bergmann @ 2024-04-04 15:16 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Nathan Chancellor, Nicolas Schier, linux-kbuild, Arnd Bergmann,
	Jani Nikula, Andrew Jeffery, Gustavo A. R. Silva, linux-kernel

From: Arnd Bergmann <arnd@arndb.de>

There is no point in turning individual options off and then on again,
or vice versa, as the last one always wins. Now that -Wextra always
gets passed first, remove all the redundant lines about warnings
that are implied by either -Wall or -Wextra, and keep only the last
one that disables it in some configurations.

This should not have any effect but keep the Makefile more readable
and the command line shorter.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 scripts/Makefile.extrawarn | 16 ----------------
 1 file changed, 16 deletions(-)

diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn
index c247552c192c..17b00d85f6aa 100644
--- a/scripts/Makefile.extrawarn
+++ b/scripts/Makefile.extrawarn
@@ -37,11 +37,6 @@ else
 KBUILD_CFLAGS += -Wno-main
 endif
 
-# These warnings generated too much noise in a regular build.
-# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
-KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
-KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
-
 # These result in bogus false positives
 KBUILD_CFLAGS += $(call cc-disable-warning, dangling-pointer)
 
@@ -90,16 +85,8 @@ KBUILD_CFLAGS += -Wunused
 #
 ifneq ($(findstring 1, $(KBUILD_EXTRA_WARN)),)
 
-KBUILD_CFLAGS += $(call cc-option, -Wrestrict)
 KBUILD_CFLAGS += -Wmissing-format-attribute
-KBUILD_CFLAGS += -Wold-style-definition
 KBUILD_CFLAGS += -Wmissing-include-dirs
-KBUILD_CFLAGS += $(call cc-option, -Wunused-but-set-variable)
-KBUILD_CFLAGS += $(call cc-option, -Wunused-const-variable)
-KBUILD_CFLAGS += $(call cc-option, -Wpacked-not-aligned)
-KBUILD_CFLAGS += $(call cc-option, -Wformat-overflow)
-KBUILD_CFLAGS += $(call cc-option, -Wformat-truncation)
-KBUILD_CFLAGS += $(call cc-option, -Wstringop-truncation)
 
 KBUILD_CPPFLAGS += -Wundef
 KBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN1
@@ -150,9 +137,6 @@ ifneq ($(findstring 2, $(KBUILD_EXTRA_WARN)),)
 KBUILD_CFLAGS += -Wdisabled-optimization
 KBUILD_CFLAGS += -Wshadow
 KBUILD_CFLAGS += $(call cc-option, -Wlogical-op)
-KBUILD_CFLAGS += -Wmissing-field-initializers
-KBUILD_CFLAGS += -Wtype-limits
-KBUILD_CFLAGS += $(call cc-option, -Wmaybe-uninitialized)
 KBUILD_CFLAGS += $(call cc-option, -Wunused-macros)
 
 KBUILD_CPPFLAGS += -DKBUILD_EXTRA_WARN2
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/4] kbuild: turn on -Wrestrict by default
       [not found] <20240404151713.3493098-1-arnd@kernel.org>
  2024-04-04 15:16 ` [PATCH 1/4] kbuild: turn on -Wextra by default Arnd Bergmann
  2024-04-04 15:16 ` [PATCH 2/4] kbuild: remove redundant extra warning flags Arnd Bergmann
@ 2024-04-04 15:16 ` Arnd Bergmann
  2024-04-04 15:16 ` [PATCH 4/4] kbuild: enable -Wformat-truncation on clang Arnd Bergmann
  3 siblings, 0 replies; 6+ messages in thread
From: Arnd Bergmann @ 2024-04-04 15:16 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Nathan Chancellor, Nicolas Schier, linux-kbuild, Arnd Bergmann,
	Jani Nikula, Gustavo A. R. Silva, linux-kernel

From: Arnd Bergmann <arnd@arndb.de>

All known -Wrestrict warnings are addressed now, so don't disable the warning
any more.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 scripts/Makefile.extrawarn | 1 -
 1 file changed, 1 deletion(-)

diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn
index 17b00d85f6aa..fbe4d7144860 100644
--- a/scripts/Makefile.extrawarn
+++ b/scripts/Makefile.extrawarn
@@ -97,7 +97,6 @@ else
 # Suppress them by using -Wno... except for W=1.
 KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
 KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
-KBUILD_CFLAGS += $(call cc-disable-warning, restrict)
 KBUILD_CFLAGS += $(call cc-disable-warning, packed-not-aligned)
 KBUILD_CFLAGS += $(call cc-disable-warning, format-overflow)
 KBUILD_CFLAGS += $(call cc-disable-warning, format-truncation)
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 4/4] kbuild: enable -Wformat-truncation on clang
       [not found] <20240404151713.3493098-1-arnd@kernel.org>
                   ` (2 preceding siblings ...)
  2024-04-04 15:16 ` [PATCH 3/4] kbuild: turn on -Wrestrict by default Arnd Bergmann
@ 2024-04-04 15:16 ` Arnd Bergmann
  3 siblings, 0 replies; 6+ messages in thread
From: Arnd Bergmann @ 2024-04-04 15:16 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Nathan Chancellor, Nicolas Schier, linux-kbuild, Arnd Bergmann,
	Nick Desaulniers, Bill Wendling, Justin Stitt, Jani Nikula,
	Kees Cook, Gustavo A. R. Silva, linux-kernel, llvm

From: Arnd Bergmann <arnd@arndb.de>

This warning option still produces output on gcc but is now clean when
building with clang, so enable it conditionally on the compiler for now.

As far as I can tell, the remaining warnings with gcc are the result of
analysing the code more deeply across inlining, while clang only does
this within a function.

Link: https://lore.kernel.org/lkml/20240326230511.GA2796782@dev-arch.thelio-3990X/
Link: https://lore.kernel.org/linux-patches/20231002-disable-wformat-truncation-overflow-non-kprintf-v1-1-35179205c8d9@kernel.org/
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 scripts/Makefile.extrawarn | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn
index fbe4d7144860..5063b847a658 100644
--- a/scripts/Makefile.extrawarn
+++ b/scripts/Makefile.extrawarn
@@ -99,7 +99,14 @@ KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
 KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
 KBUILD_CFLAGS += $(call cc-disable-warning, packed-not-aligned)
 KBUILD_CFLAGS += $(call cc-disable-warning, format-overflow)
+ifdef CONFIG_CC_IS_GCC
 KBUILD_CFLAGS += $(call cc-disable-warning, format-truncation)
+else
+# Clang checks for overflow/truncation with '%p', while GCC does not:
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111219
+KBUILD_CFLAGS += $(call cc-disable-warning, format-overflow-non-kprintf)
+KBUILD_CFLAGS += $(call cc-disable-warning, format-truncation-non-kprintf)
+endif
 KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
 
 KBUILD_CFLAGS += -Wno-override-init # alias for -Wno-initializer-overrides in clang
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/4] kbuild: turn on -Wextra by default
  2024-04-04 15:16 ` [PATCH 1/4] kbuild: turn on -Wextra by default Arnd Bergmann
@ 2024-04-09 16:25   ` Nathan Chancellor
  2024-04-09 18:42     ` Arnd Bergmann
  0 siblings, 1 reply; 6+ messages in thread
From: Nathan Chancellor @ 2024-04-09 16:25 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Masahiro Yamada, Nicolas Schier, linux-kbuild, Arnd Bergmann,
	linux-kernel, llvm

On Thu, Apr 04, 2024 at 05:16:54PM +0200, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@arndb.de>
> 
> The -Wextra option controls a number of different warnings that differ
> slightly by compiler version. Some are useful in general, others are
> better left at W=1 or higher. Based on earlier work, the ones that
> should be disabled by default are left for the higher warning levels
> already, and a lot of the useful ones have no remaining output when
> enabled.
> 
> Move the -Wextra option up into the set of default-enabled warnings
> and just rely on the individual ones getting disabled as needed.
> 
> The -Wunused warning was always grouped with this, so turn it on
> by default as well, except for the -Wunused-parameter warning that
> really has no value at all for the kernel since many interfaces
> have intentionally unused arguments.
> 
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

I have not done any LLVM builds with this change but if this is going to
be in -next for a little bit, we should be able to get any regressions
handled quickly.

I am in favor of more warnings but I am a little nervous this will make
compiler upgrades (or tracking their mainline) even more difficult. I do
not have a feeling for how often warnings are added to -Wall and -Wextra
so this may be unfounded but the kernel's -Werror use complicates this
in my opinion. I can engage with the clang folks to try and be given a
heads up when a warning is going to be added to -Wextra, it would be
good to have someone do something similar for GCC, so that those
upgrades do not cause something like this change to be rolled back.

It is easy enough to back out of this if necessary though, so:

Acked-by: Nathan Chancellor <nathan@kernel.org>

> ---
>  scripts/Makefile.extrawarn | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn
> index c5af566e911a..c247552c192c 100644
> --- a/scripts/Makefile.extrawarn
> +++ b/scripts/Makefile.extrawarn
> @@ -82,12 +82,14 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=designated-init)
>  # Warn if there is an enum types mismatch
>  KBUILD_CFLAGS += $(call cc-option,-Wenum-conversion)
>  
> +KBUILD_CFLAGS += -Wextra
> +KBUILD_CFLAGS += -Wunused
> +
>  #
>  # W=1 - warnings which may be relevant and do not occur too often
>  #
>  ifneq ($(findstring 1, $(KBUILD_EXTRA_WARN)),)
>  
> -KBUILD_CFLAGS += -Wextra -Wunused -Wno-unused-parameter
>  KBUILD_CFLAGS += $(call cc-option, -Wrestrict)
>  KBUILD_CFLAGS += -Wmissing-format-attribute
>  KBUILD_CFLAGS += -Wold-style-definition
> @@ -190,6 +192,7 @@ else
>  
>  # The following turn off the warnings enabled by -Wextra
>  KBUILD_CFLAGS += -Wno-sign-compare
> +KBUILD_CFLAGS += -Wno-unused-parameter
>  
>  endif
>  
> -- 
> 2.39.2
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/4] kbuild: turn on -Wextra by default
  2024-04-09 16:25   ` Nathan Chancellor
@ 2024-04-09 18:42     ` Arnd Bergmann
  0 siblings, 0 replies; 6+ messages in thread
From: Arnd Bergmann @ 2024-04-09 18:42 UTC (permalink / raw)
  To: Nathan Chancellor, Arnd Bergmann
  Cc: Masahiro Yamada, Nicolas Schier, linux-kbuild, linux-kernel, llvm

On Tue, Apr 9, 2024, at 18:25, Nathan Chancellor wrote:
> On Thu, Apr 04, 2024 at 05:16:54PM +0200, Arnd Bergmann wrote:
>> From: Arnd Bergmann <arnd@arndb.de>
>
> I have not done any LLVM builds with this change but if this is going to
> be in -next for a little bit, we should be able to get any regressions
> handled quickly.
>
> I am in favor of more warnings but I am a little nervous this will make
> compiler upgrades (or tracking their mainline) even more difficult. I do
> not have a feeling for how often warnings are added to -Wall and -Wextra
> so this may be unfounded but the kernel's -Werror use complicates this
> in my opinion. I can engage with the clang folks to try and be given a
> heads up when a warning is going to be added to -Wextra, it would be
> good to have someone do something similar for GCC, so that those
> upgrades do not cause something like this change to be rolled back.

My impression is that most new warnings get added to -Wall rather than
-Wextra anyway. If they are added to -Wextra, it's still easy enough
to turn them off individually unless W=1 is set.

> It is easy enough to back out of this if necessary though, so:
>
> Acked-by: Nathan Chancellor <nathan@kernel.org>

Thanks!

     Arnd

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-04-09 19:18 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20240404151713.3493098-1-arnd@kernel.org>
2024-04-04 15:16 ` [PATCH 1/4] kbuild: turn on -Wextra by default Arnd Bergmann
2024-04-09 16:25   ` Nathan Chancellor
2024-04-09 18:42     ` Arnd Bergmann
2024-04-04 15:16 ` [PATCH 2/4] kbuild: remove redundant extra warning flags Arnd Bergmann
2024-04-04 15:16 ` [PATCH 3/4] kbuild: turn on -Wrestrict by default Arnd Bergmann
2024-04-04 15:16 ` [PATCH 4/4] kbuild: enable -Wformat-truncation on clang Arnd Bergmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox