+2006-09-30 Joseph S. Myers <joseph@codesourcery.com>
+
+ PR c/24010
+ * c.opt (Woverride-init): New.
+ * c-opts.c (c_common_post_options): Default warn_override_init to
+ extra_warnings.
+ * c-typeck.c (add_pending_init, output_init_element): Warn for
+ overriding initializers without side effects.
+ * doc/invoke.texi (-Woverride-init): Document.
+ (-Wextra): Update.
+
2006-09-30 Eric Botcazou <ebotcazou@libertysurf.fr>
PR rtl-optimization/28096
if (flag_objc_exceptions && !flag_objc_sjlj_exceptions)
flag_exceptions = 1;
- /* -Wextra implies -Wsign-compare and -Wmissing-field-initializers,
- but not if explicitly overridden. */
+ /* -Wextra implies -Wsign-compare, -Wmissing-field-initializers and
+ -Woverride-init, but not if explicitly overridden. */
if (warn_sign_compare == -1)
warn_sign_compare = extra_warnings;
if (warn_missing_field_initializers == -1)
warn_missing_field_initializers = extra_warnings;
+ if (warn_override_init == -1)
+ warn_override_init = extra_warnings;
/* -Wpointer_sign is disabled by default, but it is enabled if any
of -Wall or -pedantic are given. */
{
if (TREE_SIDE_EFFECTS (p->value))
warning_init ("initialized field with side-effects overwritten");
+ else if (warn_override_init)
+ warning_init ("initialized field overwritten");
p->value = value;
return;
}
{
if (TREE_SIDE_EFFECTS (p->value))
warning_init ("initialized field with side-effects overwritten");
+ else if (warn_override_init)
+ warning_init ("initialized field overwritten");
p->value = value;
return;
}
if (TREE_SIDE_EFFECTS (VEC_last (constructor_elt,
constructor_elements)->value))
warning_init ("initialized field with side-effects overwritten");
+ else if (warn_override_init)
+ warning_init ("initialized field overwritten");
/* We can have just one union field set. */
constructor_elements = 0;
C++ ObjC++ Var(warn_overloaded_virtual)
Warn about overloaded virtual function names
+Woverride-init
+C ObjC Var(warn_override_init) Init(-1)
+Warn about overriding initializers without side effects
+
Wparentheses
C ObjC C++ ObjC++ Var(warn_parentheses)
Warn about possibly missing parentheses
This warning can be independently controlled by
@option{-Wmissing-field-initializers}.
+@item
+An initialized field without side effects is overridden when using
+designated initializers (@pxref{Designated Inits, , Designated
+Initializers}). This warning can be independently controlled by
+@option{-Woverride-init}.
+
@item
A function parameter is declared without a type specifier in K&R-style
functions:
@opindex Wno-overflow
Do not warn about compile-time overflow in constant expressions.
+@item -Woverride-init
+@opindex Woverride-init
+@opindex W
+@opindex Wextra
+Warn if an initialized field without side effects is overridden when
+using designated initializers (@pxref{Designated Inits, , Designated
+Initializers}).
+
+This warning is included in @option{-Wextra}. To get other
+@option{-Wextra} warnings without this one, use @samp{-Wextra
+-Wno-override-init}.
+
@item -Wpacked
@opindex Wpacked
Warn if a structure is given the packed attribute, but the packed
+2006-09-30 Joseph S. Myers <joseph@codesourcery.com>
+
+ PR c/24010
+ * gcc.dg/Woverride-init-1.c, gcc.dg/Woverride-init-2.c,
+ gcc.dg/Woverride-init-3.c: New tests.
+
2006-09-30 Eric Botcazou <ebotcazou@libertysurf.fr>
* gcc.c-torture/execute/20060930-1.c: New test.
--- /dev/null
+/* Test for warnings for overriding designated initializers:
+ -Woverride-init. Bug 24010. */
+/* Origin: Joseph Myers <joseph@codesourcery.com> */
+/* { dg-do compile } */
+/* { dg-options "-Woverride-init" } */
+
+struct s { int a; int b; int c; };
+union u { char a; long long b; };
+
+struct s s0 = {
+ .a = 1,
+ .b = 2,
+ .a = 3, /* { dg-warning "initialized field overwritten|near init" } */
+ 4, /* { dg-warning "initialized field overwritten|near init" } */
+ 5
+};
+
+union u u0 = {
+ .a = 1,
+ .b = 2, /* { dg-warning "initialized field overwritten|near init" } */
+ .a = 3 }; /* { dg-warning "initialized field overwritten|near init" } */
+
+int a[5] = {
+ [0] = 1,
+ [1] = 2,
+ [0] = 3, /* { dg-warning "initialized field overwritten|near init" } */
+ [2] = 4
+};
--- /dev/null
+/* Test for warnings for overriding designated initializers:
+ -Wextra. Bug 24010. */
+/* Origin: Joseph Myers <joseph@codesourcery.com> */
+/* { dg-do compile } */
+/* { dg-options "-Wextra" } */
+
+struct s { int a; int b; int c; };
+union u { char a; long long b; };
+
+struct s s0 = {
+ .a = 1,
+ .b = 2,
+ .a = 3, /* { dg-warning "initialized field overwritten|near init" } */
+ 4, /* { dg-warning "initialized field overwritten|near init" } */
+ 5
+};
+
+union u u0 = {
+ .a = 1,
+ .b = 2, /* { dg-warning "initialized field overwritten|near init" } */
+ .a = 3 }; /* { dg-warning "initialized field overwritten|near init" } */
+
+int a[5] = {
+ [0] = 1,
+ [1] = 2,
+ [0] = 3, /* { dg-warning "initialized field overwritten|near init" } */
+ [2] = 4
+};
--- /dev/null
+/* Test for warnings for overriding designated initializers: not
+ warned for with -Wextra -Wno-override-init. Bug 24010. */
+/* Origin: Joseph Myers <joseph@codesourcery.com> */
+/* { dg-do compile } */
+/* { dg-options "-Wextra -Wno-override-init" } */
+
+struct s { int a; int b; int c; };
+union u { char a; long long b; };
+
+struct s s0 = {
+ .a = 1,
+ .b = 2,
+ .a = 3,
+ 4,
+ 5
+};
+
+union u u0 = {
+ .a = 1,
+ .b = 2,
+ .a = 3
+};
+
+int a[5] = {
+ [0] = 1,
+ [1] = 2,
+ [0] = 3,
+ [2] = 4
+};