]> gcc.gnu.org Git - gcc.git/commitdiff
re PR c/24010 (Duplicate C99 dot initializer warning missing)
authorJoseph Myers <joseph@codesourcery.com>
Sat, 30 Sep 2006 19:46:06 +0000 (20:46 +0100)
committerJoseph Myers <jsm28@gcc.gnu.org>
Sat, 30 Sep 2006 19:46:06 +0000 (20:46 +0100)
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.

testsuite:
* gcc.dg/Woverride-init-1.c, gcc.dg/Woverride-init-2.c,
gcc.dg/Woverride-init-3.c: New tests.

From-SVN: r117334

gcc/ChangeLog
gcc/c-opts.c
gcc/c-typeck.c
gcc/c.opt
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/Woverride-init-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/Woverride-init-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/Woverride-init-3.c [new file with mode: 0644]

index 7a0e026c28129d791cae646be3b65811edbd387e..e7fc16ffab969ee982fc0f7f70ac2ac24d7062f1 100644 (file)
@@ -1,3 +1,14 @@
+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
index 5821deabb969ab642daa2218e1722cff2fd21d73..b74ce773088767fbc16df37a8ffda3981bc96d87 100644 (file)
@@ -1016,12 +1016,14 @@ c_common_post_options (const char **pfilename)
   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.  */
index 00537ac3f4c6ad08a726caf31c0ec1dcbb3df070..89bfed1db64bf1ba0507e85321a206c80b4efc13 100644 (file)
@@ -5737,6 +5737,8 @@ add_pending_init (tree purpose, tree value)
            {
              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;
            }
@@ -5758,6 +5760,8 @@ add_pending_init (tree purpose, tree value)
            {
              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;
            }
@@ -6230,6 +6234,8 @@ output_init_element (tree value, bool strict_string, tree type, tree field,
       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;
index 12510d9697f452b789c3df750cab09306c6e1493..0aa0a3ad30c9df9a44b23d6d0da0a41fc24ae5c0 100644 (file)
--- a/gcc/c.opt
+++ b/gcc/c.opt
@@ -319,6 +319,10 @@ Woverloaded-virtual
 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
index d5a3b6bac6bd39394d84c9fcb78a02c626b7d50a..6d7bc1e1eeca3bddd14f4d408a34118d1eef0cd2 100644 (file)
@@ -2875,6 +2875,12 @@ An aggregate has an initializer which does not initialize all members.
 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:
@@ -3302,6 +3308,18 @@ attribute.
 @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
index c5c774a66702f16dbd30cb15e720438ec6ad69c1..51599a7c544c316e11fbb901f74a1c01d26bb756 100644 (file)
@@ -1,3 +1,9 @@
+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.
diff --git a/gcc/testsuite/gcc.dg/Woverride-init-1.c b/gcc/testsuite/gcc.dg/Woverride-init-1.c
new file mode 100644 (file)
index 0000000..29eca30
--- /dev/null
@@ -0,0 +1,28 @@
+/* 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
+};
diff --git a/gcc/testsuite/gcc.dg/Woverride-init-2.c b/gcc/testsuite/gcc.dg/Woverride-init-2.c
new file mode 100644 (file)
index 0000000..c5490b5
--- /dev/null
@@ -0,0 +1,28 @@
+/* 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
+};
diff --git a/gcc/testsuite/gcc.dg/Woverride-init-3.c b/gcc/testsuite/gcc.dg/Woverride-init-3.c
new file mode 100644 (file)
index 0000000..3fec738
--- /dev/null
@@ -0,0 +1,29 @@
+/* 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
+};
This page took 0.093059 seconds and 5 git commands to generate.