Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec223222 authored by Linus Torvalds's avatar Linus Torvalds Committed by Greg Kroah-Hartman
Browse files

Stop the ad-hoc games with -Wno-maybe-initialized



commit 78a5255ffb6a1af189a83e493d916ba1c54d8c75 upstream.

We have some rather random rules about when we accept the
"maybe-initialized" warnings, and when we don't.

For example, we consider it unreliable for gcc versions < 4.9, but also
if -O3 is enabled, or if optimizing for size.  And then various kernel
config options disabled it, because they know that they trigger that
warning by confusing gcc sufficiently (ie PROFILE_ALL_BRANCHES).

And now gcc-10 seems to be introducing a lot of those warnings too, so
it falls under the same heading as 4.9 did.

At the same time, we have a very straightforward way to _enable_ that
warning when wanted: use "W=2" to enable more warnings.

So stop playing these ad-hoc games, and just disable that warning by
default, with the known and straight-forward "if you want to work on the
extra compiler warnings, use W=123".

Would it be great to have code that is always so obvious that it never
confuses the compiler whether a variable is used initialized or not?
Yes, it would.  In a perfect world, the compilers would be smarter, and
our source code would be simpler.

That's currently not the world we live in, though.

Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9088569b
Loading
Loading
Loading
Loading
+3 −4
Original line number Original line Diff line number Diff line
@@ -662,10 +662,6 @@ else
KBUILD_CFLAGS   += -O2
KBUILD_CFLAGS   += -O2
endif
endif


ifdef CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED
KBUILD_CFLAGS   += -Wno-maybe-uninitialized
endif

# Tell gcc to never replace conditional load with a non-conditional one
# Tell gcc to never replace conditional load with a non-conditional one
KBUILD_CFLAGS	+= $(call cc-option,--param=allow-store-data-races=0)
KBUILD_CFLAGS	+= $(call cc-option,--param=allow-store-data-races=0)


@@ -796,6 +792,9 @@ KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign)
# disable stringop warnings in gcc 8+
# disable stringop warnings in gcc 8+
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)


# Enabled with W=2, disabled by default as noisy
KBUILD_CFLAGS += $(call cc-disable-warning, maybe-uninitialized)

# disable invalid "can't wrap" optimizations for signed / pointers
# disable invalid "can't wrap" optimizations for signed / pointers
KBUILD_CFLAGS	+= $(call cc-option,-fno-strict-overflow)
KBUILD_CFLAGS	+= $(call cc-option,-fno-strict-overflow)


+0 −17
Original line number Original line Diff line number Diff line
@@ -26,22 +26,6 @@ config CLANG_VERSION
config CC_HAS_ASM_GOTO
config CC_HAS_ASM_GOTO
	def_bool $(success,$(srctree)/scripts/gcc-goto.sh $(CC))
	def_bool $(success,$(srctree)/scripts/gcc-goto.sh $(CC))


config CC_HAS_WARN_MAYBE_UNINITIALIZED
	def_bool $(cc-option,-Wmaybe-uninitialized)
	help
	  GCC >= 4.7 supports this option.

config CC_DISABLE_WARN_MAYBE_UNINITIALIZED
	bool
	depends on CC_HAS_WARN_MAYBE_UNINITIALIZED
	default CC_IS_GCC && GCC_VERSION < 40900  # unreliable for GCC < 4.9
	help
	  GCC's -Wmaybe-uninitialized is not reliable by definition.
	  Lots of false positive warnings are produced in some cases.

	  If this option is enabled, -Wno-maybe-uninitialzed is passed
	  to the compiler to suppress maybe-uninitialized warnings.

config CONSTRUCTORS
config CONSTRUCTORS
	bool
	bool
	depends on !UML
	depends on !UML
@@ -1099,7 +1083,6 @@ config CC_OPTIMIZE_FOR_PERFORMANCE


config CC_OPTIMIZE_FOR_SIZE
config CC_OPTIMIZE_FOR_SIZE
	bool "Optimize for size"
	bool "Optimize for size"
	imply CC_DISABLE_WARN_MAYBE_UNINITIALIZED  # avoid false positives
	help
	help
	  Enabling this option will pass "-Os" instead of "-O2" to
	  Enabling this option will pass "-Os" instead of "-O2" to
	  your compiler resulting in a smaller kernel.
	  your compiler resulting in a smaller kernel.
+0 −1
Original line number Original line Diff line number Diff line
@@ -370,7 +370,6 @@ config PROFILE_ANNOTATED_BRANCHES
config PROFILE_ALL_BRANCHES
config PROFILE_ALL_BRANCHES
	bool "Profile all if conditionals" if !FORTIFY_SOURCE
	bool "Profile all if conditionals" if !FORTIFY_SOURCE
	select TRACE_BRANCH_PROFILING
	select TRACE_BRANCH_PROFILING
	imply CC_DISABLE_WARN_MAYBE_UNINITIALIZED  # avoid false positives
	help
	help
	  This tracer profiles all branch conditions. Every if ()
	  This tracer profiles all branch conditions. Every if ()
	  taken in the kernel is recorded whether it hit or miss.
	  taken in the kernel is recorded whether it hit or miss.