aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2014-09-11 18:08:24 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2014-09-11 18:08:24 +0000
commit450bfd7d5cd2a048edd1119bc5306b95d6386101 (patch)
tree26b32d4a7c2b46ee245615c638135bc13711d88f
parentbc138f7bee702b3cc0237add039923edda9fcc24 (diff)
downloadgcc-450bfd7d5cd2a048edd1119bc5306b95d6386101.zip
gcc-450bfd7d5cd2a048edd1119bc5306b95d6386101.tar.gz
gcc-450bfd7d5cd2a048edd1119bc5306b95d6386101.tar.bz2
re PR c++/61489 (Wrong warning with -Wmissing-field-initializers.)
2014-09-11 Paolo Carlini <paolo.carlini@oracle.com> PR c++/61489 * doc/invoke.texi ([-Wmissing-field-initializers]): Update. /cp 2014-09-11 Paolo Carlini <paolo.carlini@oracle.com> PR c++/61489 * typeck2.c (process_init_constructor_record): Do not warn about missing field initializer if EMPTY_CONSTRUCTOR_P (init). /testsuite 2014-09-11 Paolo Carlini <paolo.carlini@oracle.com> PR c++/61489 * g++.dg/warn/Wmissing-field-initializers-1.C: New. * g++.old-deja/g++.other/warn5.C: Adjust. From-SVN: r215186
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/typeck2.c6
-rw-r--r--gcc/doc/invoke.texi8
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/warn/Wmissing-field-initializers-1.C31
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/warn5.C2
7 files changed, 61 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5097819..82d70df 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2014-09-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/61489
+ * doc/invoke.texi ([-Wmissing-field-initializers]): Update.
+
2014-09-11 Alan Lawrence <alan.lawrence@arm.com>
* config/aarch64/aarch64-builtins.c (aarch64_types_unop_su_qualifiers,
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7ebc56b..afefed4 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2014-09-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/61489
+ * typeck2.c (process_init_constructor_record): Do not warn about
+ missing field initializer if EMPTY_CONSTRUCTOR_P (init).
+
2014-09-11 Jason Merrill <jason@redhat.com>
PR c++/63139
diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index c985a4b..c6306b5 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -1359,7 +1359,8 @@ process_init_constructor_record (tree type, tree init,
next = massage_init_elt (TREE_TYPE (field), next, complain);
/* Warn when some struct elements are implicitly initialized. */
- if (complain & tf_warning)
+ if ((complain & tf_warning)
+ && !EMPTY_CONSTRUCTOR_P (init))
warning (OPT_Wmissing_field_initializers,
"missing initializer for member %qD", field);
}
@@ -1382,7 +1383,8 @@ process_init_constructor_record (tree type, tree init,
/* Warn when some struct elements are implicitly initialized
to zero. */
- if (complain & tf_warning)
+ if ((complain & tf_warning)
+ && !EMPTY_CONSTRUCTOR_P (init))
warning (OPT_Wmissing_field_initializers,
"missing initializer for member %qD", field);
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 863b382..68e992d 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -4912,6 +4912,14 @@ struct s @{ int f, g, h; @};
struct s x = @{ .f = 3, .g = 4 @};
@end smallexample
+In C++ this option does not warn either about the empty @{ @}
+initializer, for example:
+
+@smallexample
+struct s @{ int f, g, h; @};
+s x = @{ @};
+@end smallexample
+
This warning is included in @option{-Wextra}. To get other @option{-Wextra}
warnings without this one, use @option{-Wextra -Wno-missing-field-initializers}.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 60397bf..3f88bb6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2014-09-11 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/61489
+ * g++.dg/warn/Wmissing-field-initializers-1.C: New.
+ * g++.old-deja/g++.other/warn5.C: Adjust.
+
2014-09-11 Alan Lawrence <alan.lawrence@arm.com>
* gcc.target/aarch64/vset_lane_1.c: New test.
diff --git a/gcc/testsuite/g++.dg/warn/Wmissing-field-initializers-1.C b/gcc/testsuite/g++.dg/warn/Wmissing-field-initializers-1.C
new file mode 100644
index 0000000..47308d9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wmissing-field-initializers-1.C
@@ -0,0 +1,31 @@
+// PR c++/61489
+// { dg-options "-Wmissing-field-initializers" }
+
+struct mystruct1 {
+ int a, b;
+};
+
+struct aux2 {
+ aux2();
+};
+
+struct mystruct2 {
+ aux2 a, b;
+};
+
+struct aux3 {
+ int x;
+};
+
+struct mystruct3 {
+ aux3 a, b;
+};
+
+mystruct1 obj11 = {};
+mystruct1 obj12 = {0}; // { dg-warning "missing initializer" }
+
+mystruct2 obj21 = {};
+mystruct2 obj22 = {aux2()}; // { dg-warning "missing initializer" }
+
+mystruct3 obj31 = {};
+mystruct3 obj32 = {0}; // { dg-warning "missing initializer" }
diff --git a/gcc/testsuite/g++.old-deja/g++.other/warn5.C b/gcc/testsuite/g++.old-deja/g++.other/warn5.C
index 84fa3e4..a4e07e8 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/warn5.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/warn5.C
@@ -16,4 +16,4 @@ X *foo ()
return new X (); // gets bogus warning
}
-X x = {}; // { dg-warning "" } missing initializer
+X x = {};