Hello, I accidentally used Init(1) for the option instead of Init(0). The correction is as follows:
diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 15bbb8e69f7..8bfa28e5f6c 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1192,7 +1192,7 @@ C ObjC C++ ObjC++ LTO LangEnabledBy(C ObjC C++ ObjC++ LTO,Wall) ; Wuniversal-initializer -C ObjC C++ ObjC++ Var(warn_zero_init) Init(1) Warning +C ObjC C++ ObjC++ Var(warn_zero_init) Init(0) Warning Don't suppress warnings about { 0 }. Wmaybe-uninitialized
Here is the entire fixed patch:
From 93a5f60bf72e37538cad3d4fb81da985b97fba8e Mon Sep 17 00:00:00 2001 From: Asher Gordon <asd...@posteo.net> Date: Sun, 7 Jun 2020 13:37:27 -0400 Subject: [PATCH] Add -Wuniversal-initializer to not suppress warnings about { 0 }.
gcc/ChangeLog: * doc/invoke.texi: Document -Wuniversal-initializer. gcc/c-family/ChangeLog: * c.opt: Add -Wuniversal-initializer gcc/c/ChangeLog: * c-typeck.c (pop_init_level): Don't suppress warnings about { 0 } if warn_zero_init. gcc/testsuite/ChangeLog: * gcc.dg/Wuniversal-initializer.c: New test. --- gcc/ChangeLog | 4 ++++ gcc/c-family/ChangeLog | 4 ++++ gcc/c-family/c.opt | 4 ++++ gcc/c/ChangeLog | 5 +++++ gcc/c/c-typeck.c | 9 ++++---- gcc/doc/invoke.texi | 22 ++++++++++++++++++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/Wuniversal-initializer.c | 20 +++++++++++++++++ 8 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/Wuniversal-initializer.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d569416c02f..15d520d3656 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2020-06-07 Asher Gordon <asd...@posteo.net> + + * doc/invoke.texi: Document -Wuniversal-initializer. + 2020-06-06 Jan Hubicka <hubi...@ucw.cz> PR lto/95548 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 8fac84d3b02..6824d7ea130 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,7 @@ +2020-06-07 Asher Gordon <asd...@posteo.net> + + * c.opt: Add -Wuniversal-initializer + 2020-06-05 Jason Merrill <ja...@redhat.com> * c-pretty-print.c (pp_c_additive_expression): Handle negative diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 89a58282b3f..8bfa28e5f6c 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1191,6 +1191,10 @@ Wuninitialized C ObjC C++ ObjC++ LTO LangEnabledBy(C ObjC C++ ObjC++ LTO,Wall) ; +Wuniversal-initializer +C ObjC C++ ObjC++ Var(warn_zero_init) Init(0) Warning +Don't suppress warnings about { 0 }. + Wmaybe-uninitialized C ObjC C++ ObjC++ LTO LangEnabledBy(C ObjC C++ ObjC++ LTO,Wall) ; diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 50fb1e87ad6..3ade67830e8 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,8 @@ +2020-06-07 Asher Gordon <asd...@posteo.net> + + * c-typeck.c (pop_init_level): Don't suppress warnings about { 0 } + if warn_zero_init. + 2020-06-05 Mark Wielaard <m...@klomp.org> * c-decl.c (implicit_decl_warning): When warned and olddecl is diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c index 2d04f70f0cf..e1071472301 100644 --- a/gcc/c/c-typeck.c +++ b/gcc/c/c-typeck.c @@ -8724,7 +8724,7 @@ pop_init_level (location_t loc, int implicit, /* Warn when some structs are initialized with direct aggregation. */ if (!implicit && found_missing_braces && warn_missing_braces - && !constructor_zeroinit) + && (!constructor_zeroinit || warn_zero_init)) { gcc_assert (initializer_stack->missing_brace_richloc); warning_at (initializer_stack->missing_brace_richloc, @@ -8748,8 +8748,9 @@ pop_init_level (location_t loc, int implicit, /* Do not warn if this level of the initializer uses member designators; it is likely to be deliberate. */ && !constructor_designated - /* Do not warn about initializing with { 0 } or with { }. */ - && !constructor_zeroinit) + /* Do not warn about initializing with { 0 } or with { } + unless warn_zero_init. */ + && (!constructor_zeroinit || warn_zero_init)) { if (warning_at (input_location, OPT_Wmissing_field_initializers, "missing initializer for field %qD of %qT", @@ -8766,7 +8767,7 @@ pop_init_level (location_t loc, int implicit, { struct location_list *loc = initializer_stack->positional_init_locs; - if (!constructor_zeroinit) + if (!constructor_zeroinit || warn_zero_init) warning_init (loc->loc, OPT_Wdesignated_init, "positional initialization of field in %<struct%> " diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 06a04e3d7dd..f0893c250e7 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -369,7 +369,7 @@ Objective-C and Objective-C++ Dialects}. -Wno-switch-outside-range -Wno-switch-unreachable -Wsync-nand @gol -Wsystem-headers -Wtautological-compare -Wtrampolines -Wtrigraphs @gol -Wtype-limits -Wundef @gol --Wuninitialized -Wunknown-pragmas @gol +-Wuninitialized -Wno-universal-initializer -Wunknown-pragmas @gol -Wunsuffixed-float-constants -Wunused @gol -Wunused-but-set-parameter -Wunused-but-set-variable @gol -Wunused-const-variable -Wunused-const-variable=@var{n} @gol @@ -6453,6 +6453,26 @@ to compute a value that itself is never used, because such computations may be deleted by data flow analysis before the warnings are printed. +@item -Wuniversal-initializer +@opindex Wuniversal-initializer +@opindex Wno-universal-initializer +Do not suppress warnings about the universal zero initializer, +@code{@{ 0 @}}, where a warning would otherwise be produced. For +example, even with @option{-Wmissing-braces}, the following would not +warn, because an exception is made for the universal initializer: + +@smallexample +int a[1][1] = @{ 0 @}; +@end smallexample + +However, if @code{-Wuniversal-initializer} is used, that code would +produce a warning (caused by @option{-Wmissing-braces}). + +This warning is not enabled by default, nor is it enabled by any other +options. If you don't want to suppress warnings about the universal +zero initializer, you must specify @option{-Wuniversal-initializer} +explicitly. + @item -Wno-invalid-memory-model @opindex Winvalid-memory-model @opindex Wno-invalid-memory-model diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 825f60b9d5b..65bd6fd6028 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2020-06-07 Asher Gordon <asd...@posteo.net> + + * gcc.dg/Wuniversal-initializer.c: New test. + 2020-06-06 Jan Hubicka <hubi...@ucw.cz> * g++.dg/torture/pr95548.C: New test. diff --git a/gcc/testsuite/gcc.dg/Wuniversal-initializer.c b/gcc/testsuite/gcc.dg/Wuniversal-initializer.c new file mode 100644 index 00000000000..803dfd10e1c --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wuniversal-initializer.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-Wall -Wmissing-field-initializers -Wuniversal-initializer" } */ + +struct Pok { + int x; + int y; +}; + +struct Nest { + struct Pok p; +}; + +struct Des { + int a; +} __attribute__((designated_init)); + +struct Pok p = { 0 }; /* { dg-warning "missing initializer for field" } */ +struct Nest n = { 0 }; /* { dg-warning "missing braces around initializer" } */ +struct Des d = { 0 }; /* { dg-warning "(positional|near initialization)" } */ +int a[1][1] = { 0 }; /* { dg-warning "missing braces around initializer" } */ -- 2.26.2
Thanks, Asher -- Violence is the last refuge of the incompetent. -- Salvor Hardin -------- I prefer to send and receive mail encrypted. Please send me your public key, and if you do not have my public key, please let me know. Thanks. GPG fingerprint: 38F3 975C D173 4037 B397 8095 D4C9 C4FC 5460 8E68
signature.asc
Description: PGP signature