linux/scripts
Arnd Bergmann a76bcf557e Kbuild: enable -Wmaybe-uninitialized warning for "make W=1"
Traditionally, we have always had warnings about uninitialized variables
enabled, as this is part of -Wall, and generally a good idea [1], but it
also always produced false positives, mainly because this is a variation
of the halting problem and provably impossible to get right in all cases
[2].

Various people have identified cases that are particularly bad for false
positives, and in commit e74fc973b6 ("Turn off -Wmaybe-uninitialized
when building with -Os"), I turned off the warning for any build that
was done with CC_OPTIMIZE_FOR_SIZE.  This drastically reduced the number
of false positive warnings in the default build but unfortunately had
the side effect of turning the warning off completely in 'allmodconfig'
builds, which in turn led to a lot of warnings (both actual bugs, and
remaining false positives) to go in unnoticed.

With commit 877417e6ff ("Kbuild: change CC_OPTIMIZE_FOR_SIZE
definition") enabled the warning again for allmodconfig builds in v4.7
and in v4.8-rc1, I had finally managed to address all warnings I get in
an ARM allmodconfig build and most other maybe-uninitialized warnings
for ARM randconfig builds.

However, commit 6e8d666e92 ("Disable "maybe-uninitialized" warning
globally") was merged at the same time and disabled it completely for
all configurations, because of false-positive warnings on x86 that I had
not addressed until then.  This caused a lot of actual bugs to get
merged into mainline, and I sent several dozen patches for these during
the v4.9 development cycle.  Most of these are actual bugs, some are for
correct code that is safe because it is only called under external
constraints that make it impossible to run into the case that gcc sees,
and in a few cases gcc is just stupid and finds something that can
obviously never happen.

I have now done a few thousand randconfig builds on x86 and collected
all patches that I needed to address every single warning I got (I can
provide the combined patch for the other warnings if anyone is
interested), so I hope we can get the warning back and let people catch
the actual bugs earlier.

This reverts the change to disable the warning completely and for now
brings it back at the "make W=1" level, so we can get it merged into
mainline without introducing false positives.  A follow-up patch enables
it on all levels unless some configuration option turns it off because
of false-positives.

Link: https://rusty.ozlabs.org/?p=232 [1]
Link: https://gcc.gnu.org/wiki/Better_Uninitialized_Warnings [2]
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-11-11 08:45:08 -08:00
..
basic fixdep: faster CONFIG_ search 2016-08-24 22:34:19 +02:00
coccinelle Coccinelle: flag conditions with no effect 2016-10-11 09:57:17 +02:00
dtc scripts/dtc: dt_to_config - kernel config options for a devicetree 2016-07-22 14:48:16 -05:00
gcc-plugins latent_entropy: Fix wrong gcc code generation with 64 bit variables 2016-10-31 11:30:41 -07:00
gdb Revert "scripts/gdb: add a Radix Tree Parser" 2016-07-15 14:54:27 +09:00
genksyms kbuild: Regenerate genksyms lexer 2016-08-25 20:03:51 +02:00
kconfig Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2016-05-26 22:27:09 -07:00
ksymoops
mod nmi_backtrace: generate one-line reports for idle cpus 2016-10-07 18:46:30 -07:00
package builddeb: Skip gcc-plugins when not configured 2016-08-16 10:16:38 +02:00
selinux selinux: explicitly declare the role "base_r" 2015-07-13 13:32:00 -04:00
tracing ftrace/scripts: Add helper script to bisect function tracing problem functions 2016-09-21 13:56:55 -04:00
.gitignore KEYS: Reserve an extra certificate symbol for inserting without recompiling 2016-02-26 15:30:20 +00:00
Kbuild.include kbuild: no gcc-plugins during cc-option tests 2016-08-08 17:49:05 -07:00
Lindent scripts/Lindent: handle missing indent gracefully 2015-09-04 16:54:41 -07:00
Makefile GCC plugin infrastructure 2016-06-07 22:57:10 +02:00
Makefile.asm-generic kbuild: Remove stale asm-generic wrappers 2016-07-07 15:58:45 +02:00
Makefile.build kbuild: allow architectures to use thin archives instead of ld -r 2016-09-09 10:31:19 +02:00
Makefile.clean Shared library support 2016-06-07 22:57:10 +02:00
Makefile.dtbinst dtbsinstall: don't move target directory out of the way 2016-01-28 11:40:32 +01:00
Makefile.extrawarn Kbuild: enable -Wmaybe-uninitialized warning for "make W=1" 2016-11-11 08:45:08 -08:00
Makefile.fwinst kbuild: include $(src)/Makefile rather than $(obj)/Makefile 2015-04-02 16:42:08 +02:00
Makefile.gcc-plugins gcc-plugins: Add latent_entropy plugin 2016-10-10 14:51:44 -07:00
Makefile.headersinst kbuild: collect shorthands into scripts/Kbuild.include 2014-11-26 14:36:52 +01:00
Makefile.help
Makefile.host Shared library support 2016-06-07 22:57:10 +02:00
Makefile.kasan arm64: add KASAN support 2015-10-12 17:46:36 +01:00
Makefile.lib Merge branch 'akpm' (patches from Andrew) 2016-08-02 21:08:07 -04:00
Makefile.modbuiltin
Makefile.modinst modsign: Abort modules_install when signing fails 2015-08-07 16:26:13 +01:00
Makefile.modpost kbuild: add arch specific post-link Makefile 2016-09-09 10:47:00 +02:00
Makefile.modsign modsign: lookup lines ending in .ko in .mod files 2014-08-27 21:54:11 +09:30
Makefile.ubsan Kbuild: enable -Wmaybe-uninitialized warning for "make W=1" 2016-11-11 08:45:08 -08:00
adjust_autoksyms.sh kbuild: fix adjust_autoksyms.sh for modules that need only one symbol 2016-05-10 17:25:29 +02:00
analyze_suspend.py PM / tools: scripts: AnalyzeSuspend v4.2 2016-07-15 23:34:14 +02:00
asn1_compiler.c ASN.1: fix open failure check on headername 2016-04-06 14:06:48 +01:00
bloat-o-meter scripts/bloat-o-meter: fix percent on <1% changes 2016-07-26 16:19:19 -07:00
bootgraph.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
check-lc_ctype.c DocBook: Use a fixed encoding for output 2015-09-28 01:31:48 -06:00
check_extable.sh scripts: add check_extable.sh script. 2015-04-13 21:03:02 +09:30
checkincludes.pl
checkkconfigsymbols.py checkkconfigsymbols: use arglist instead of cmd string 2016-08-28 11:08:34 +02:00
checkpatch.pl checkpatch: improve the octal permissions tests 2016-10-11 15:06:31 -07:00
checkstack.pl Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2014-10-07 21:16:26 -04:00
checksyscalls.sh x86/asm/entry: Move the arch/x86/syscalls/ definitions to arch/x86/entry/syscalls/ 2015-06-04 07:37:37 +02:00
checkversion.pl
cleanfile
cleanpatch
coccicheck scripts/coccicheck: Update reference for the corresponding documentation 2016-10-11 09:50:43 +02:00
config kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
conmakehash.c kbuild: trivial - remove trailing spaces 2014-04-30 17:34:32 +02:00
const_structs.checkpatch const_structs.checkpatch: add frequently used from Julia Lawall's list 2016-10-11 15:06:30 -07:00
decode_stacktrace.sh scripts/decode_stacktrace.sh: handle symbols in modules 2016-05-19 19:12:14 -07:00
decodecode scripts/decodecode: make faulting insn ptr more robust 2013-04-29 15:54:27 -07:00
depmod.sh depmod: pass -P $CONFIG_SYMBOL_PREFIX 2013-02-22 11:52:31 +01:00
diffconfig vfs,ext2: remove CONFIG_EXT2_FS_XIP and rename CONFIG_FS_XIP to CONFIG_FS_DAX 2015-02-16 17:56:04 -08:00
docproc.c docproc: print a comment about autogeneration for rst output 2016-05-14 09:56:56 -06:00
export_report.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
extract-cert.c KEYS: Remove unnecessary header #inclusions from extract-cert.c 2015-09-25 16:31:45 +01:00
extract-ikconfig scripts/extract-ikconfig: Support LZ4-compressed images. 2015-04-15 14:01:12 +02:00
extract-module-sig.pl KEYS: Provide a script to extract a module signature 2015-10-21 15:18:36 +01:00
extract-sys-certs.pl KEYS: Use the symbol value for list size, updated by scripts/insert-sys-cert 2016-02-26 15:32:05 +00:00
extract-vmlinux
extract_xc3028.pl [media] extract_xc3028.pl: move it to scripts/dir 2016-07-17 14:08:12 -03:00
faddr2line scripts/faddr2line: improve on base path filtering a bit 2016-09-19 14:49:08 -07:00
gcc-goto.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gcc-ld kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gcc-plugin.sh gcc-plugins: abort builds cleanly when not supported 2016-08-08 17:49:05 -07:00
gcc-version.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gcc-x86_32-has-stack-protector.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gcc-x86_64-has-stack-protector.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gen_initramfs_list.sh initramfs: Escape colons in depfile 2016-09-23 10:35:32 +02:00
get_dvb_firmware [media] doc-rst: move DVB avulse docs to Documentation/media 2016-07-17 14:02:45 -03:00
get_maintainer.pl get_maintainer: quiet noisy implicit -f vcs_file_exists checking 2016-08-26 17:39:34 -07:00
gfp-translate
headerdep.pl
headers.sh CRIS: Fix headers_install 2014-12-20 00:01:12 +01:00
headers_check.pl headers_check: don't warn about c++ guards 2016-05-24 14:12:48 +10:00
headers_install.sh Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
insert-sys-cert.c KEYS: Reserve an extra certificate symbol for inserting without recompiling 2016-02-26 15:30:20 +00:00
kallsyms.c ARM: 8553/1: kallsyms: remove --page-offset command line option 2016-04-07 21:57:16 +01:00
kernel-doc docs: Special-case function-pointer parameters in kernel-doc 2016-09-06 08:02:49 -06:00
kernel-doc-xml-ref scripts/kernel-doc: Adding cross-reference links to html documentation. 2015-08-16 22:11:16 -06:00
ld-version.sh ld-version: Drop the 4th and 5th version components 2016-05-13 14:02:05 +02:00
link-vmlinux.sh kbuild: allow architectures to use thin archives instead of ld -r 2016-09-09 10:31:19 +02:00
makelst
markup_oops.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
mkcompile_h kbuild: trivial - remove trailing spaces 2014-04-30 17:34:32 +02:00
mkmakefile kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
mksysmap mksysmap: Add h8300 local symbol pattern 2015-06-23 13:35:47 +09:00
mkuboot.sh
mkversion
module-common.lds kernel: add support for .init_array.* constructors 2015-02-13 21:21:42 -08:00
namespace.pl kallsyms: add support for relative offsets in kallsyms address table 2016-03-15 16:55:16 -07:00
objdiff scripts: objdiff: support directories for the augument of record command 2014-06-10 14:59:33 +02:00
patch-kernel kbuild: trivial - remove trailing spaces 2014-04-30 17:34:32 +02:00
pnmtologo.c kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
profile2linkerlist.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
prune-kernel scripts: add "prune-kernel" script to clean up old kernel images 2016-02-09 10:09:52 -08:00
recordmcount.c nmi_backtrace: generate one-line reports for idle cpus 2016-10-07 18:46:30 -07:00
recordmcount.h recordmcount: Fix endianness handling bug for nop_mcount 2015-11-03 10:45:26 -05:00
recordmcount.pl nmi_backtrace: generate one-line reports for idle cpus 2016-10-07 18:46:30 -07:00
setlocalversion kbuild: setlocalversion: print error to STDERR 2016-06-20 17:37:45 +02:00
show_delta kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
sign-file.c modsign: Make sign-file determine the format of the X.509 cert 2016-06-14 13:18:33 +01:00
sortextable.c parisc: Use generic extable search and sort routines 2016-03-23 16:00:46 +01:00
sortextable.h scripts/sortextable: suppress warning: `relocs_size' may be used uninitialized 2014-10-14 02:18:23 +02:00
spelling.txt spelling.txt: "modeled" is spelt correctly 2016-10-07 18:46:30 -07:00
stackdelta scripts: add stackdelta script 2015-08-28 17:04:40 +02:00
stackusage scripts: add stackusage script 2015-08-28 17:04:40 +02:00
tags.sh scripts/tags.sh: enable code completion in VIM 2016-10-11 15:06:33 -07:00
unifdef.c
ver_linux ver_linux: rename ver_linux.awk to ver_linux 2016-08-31 13:59:31 +02:00
xen-hypercalls.sh xen: build infrastructure for generating hypercall depending symbols 2015-03-16 14:49:13 +00:00
xz_wrap.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00