lkml.org 
[lkml]   [2020]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.6 126/194] Stop the ad-hoc games with -Wno-maybe-initialized
    Date
    From: Linus Torvalds <torvalds@linux-foundation.org>

    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: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    Makefile | 7 +++----
    init/Kconfig | 18 ------------------
    kernel/trace/Kconfig | 1 -
    3 files changed, 3 insertions(+), 23 deletions(-)

    --- a/Makefile
    +++ b/Makefile
    @@ -708,10 +708,6 @@ else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
    KBUILD_CFLAGS += -Os
    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
    KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)

    @@ -861,6 +857,9 @@ KBUILD_CFLAGS += -Wno-pointer-sign
    # disable stringop warnings in gcc 8+
    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
    KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)

    --- a/init/Kconfig
    +++ b/init/Kconfig
    @@ -36,22 +36,6 @@ config TOOLS_SUPPORT_RELR
    config CC_HAS_ASM_INLINE
    def_bool $(success,echo 'void foo(void) { asm inline (""); }' | $(CC) -x c - -c -o /dev/null)

    -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
    bool
    depends on !UML
    @@ -1249,14 +1233,12 @@ config CC_OPTIMIZE_FOR_PERFORMANCE
    config CC_OPTIMIZE_FOR_PERFORMANCE_O3
    bool "Optimize more for performance (-O3)"
    depends on ARC
    - imply CC_DISABLE_WARN_MAYBE_UNINITIALIZED # avoid false positives
    help
    Choosing this option will pass "-O3" to your compiler to optimize
    the kernel yet more for performance.

    config CC_OPTIMIZE_FOR_SIZE
    bool "Optimize for size (-Os)"
    - imply CC_DISABLE_WARN_MAYBE_UNINITIALIZED # avoid false positives
    help
    Choosing this option will pass "-Os" to your compiler resulting
    in a smaller kernel.
    --- a/kernel/trace/Kconfig
    +++ b/kernel/trace/Kconfig
    @@ -466,7 +466,6 @@ config PROFILE_ANNOTATED_BRANCHES
    config PROFILE_ALL_BRANCHES
    bool "Profile all if conditionals" if !FORTIFY_SOURCE
    select TRACE_BRANCH_PROFILING
    - imply CC_DISABLE_WARN_MAYBE_UNINITIALIZED # avoid false positives
    help
    This tracer profiles all branch conditions. Every if ()
    taken in the kernel is recorded whether it hit or miss.

    \
     
     \ /
      Last update: 2020-05-18 20:10    [W:4.121 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site