+2000-09-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * c-typeck.c (process_init_element): Avoid union init warnings on
+ floating point zero. Don't crash on unions containing structs.
+
2000-09-12 Alexandre Oliva <aoliva@redhat.com>
* config/sh/sh.h (PREDICATE_CODES): Add CONST_DOUBLE to
code appears conditioned on e.g. __STDC__ to avoid
"missing initializer" warnings and relies on default
initialization to zero in the traditional C case. */
- if (warn_traditional && !in_system_header && !integer_zerop (value))
+ if (warn_traditional && !in_system_header
+ && !(value && (integer_zerop (value) || real_zerop (value))))
warning ("traditional C rejects initialization of unions");
/* Accept a string constant to initialize a subarray. */
+2000-09-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.dg/wtr-union-init-2.c, gcc.dg/wtr-union-init-3.c: New tests.
+
2000-09-11 Zack Weinberg <zack@wolery.cumb.org>
* gcc.dg/cpp/backslash.c: New test.
--- /dev/null
+/* Test for -Wtraditional warnings on union initialization.
+ Note, gcc should omit these warnings in system header files.
+ By Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 9/11/2000. */
+/* { dg-do compile } */
+/* { dg-options "-Wtraditional" } */
+
+union foo1
+{
+ float f;
+ int i;
+ long l;
+};
+
+union foo2
+{
+ int i;
+ float f;
+ long l;
+};
+
+void
+testfunc (void)
+{
+ /* Note we only warn for non-zero initializers. */
+ static union foo1 f1 = {0};
+ static union foo2 f2 = {0};
+ static union foo1 f3 = {1}; /* { dg-warning "traditional C rejects initialization of unions" "initialization of unions" } */
+ static union foo2 f4 = {1}; /* { dg-warning "traditional C rejects initialization of unions" "initialization of unions" } */
+ static union foo1 f5 = {0.0};
+ static union foo2 f6 = {0.0};
+ static union foo1 f7 = {1.0}; /* { dg-warning "traditional C rejects initialization of unions" "initialization of unions" } */
+ static union foo2 f8 = {1.0}; /* { dg-warning "traditional C rejects initialization of unions" "initialization of unions" } */
+
+#line 35 "sys-header.h" 3
+/* We are in system headers now, no -Wtraditional warnings should issue. */
+
+ static union foo1 b1 = {0};
+ static union foo2 b2 = {0};
+ static union foo1 b3 = {1};
+ static union foo2 b4 = {1};
+ static union foo1 b5 = {0.0};
+ static union foo2 b6 = {0.0};
+ static union foo1 b7 = {1.0};
+ static union foo2 b8 = {1.0};
+}
--- /dev/null
+/* Test for -Wtraditional warnings on union initialization.
+ Note, gcc should omit these warnings in system header files.
+ By Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 9/11/2000. */
+/* { dg-do compile } */
+/* { dg-options "-Wtraditional" } */
+
+struct bar
+{
+ int i;
+ long j;
+};
+
+union foo
+{
+ struct bar b;
+ int i;
+ long l;
+};
+
+union foo2
+{
+ int i;
+ long l;
+};
+
+struct baz
+{
+ int a;
+ double b;
+ union foo c;
+};
+
+struct baz2
+{
+ int a;
+ double b;
+ union foo2 c;
+};
+
+void
+testfunc (void)
+{
+ /* Note we only warn for non-zero initializers. Xfail on substructures. */
+ static union foo f1 = {{0,0}}; /* { dg-bogus "traditional C rejects initialization of unions" "initialization of unions" { xfail *-*-* } } */
+ static union foo f2 = {{1,1}}; /* { dg-warning "traditional C rejects initialization of unions" "initialization of unions" } */
+
+ static struct baz f3 = { 1, 2, {{0,0}} }; /* { dg-bogus "traditional C rejects initialization of unions" "initialization of unions" { xfail *-*-* } } */
+ static struct baz f4 = { 1, 2, {{1,1}} }; /* { dg-warning "traditional C rejects initialization of unions" "initialization of unions" } */
+
+ static struct baz2 f5 = { 1, 2, {0} };
+ static struct baz2 f6 = { 1, 2, {1} }; /* { dg-warning "traditional C rejects initialization of unions" "initialization of unions" } */
+
+#line 54 "sys-header.h" 3
+/* We are in system headers now, no -Wtraditional warnings should issue. */
+
+ static union foo b1 = {{0,0}};
+ static union foo b2 = {{1,1}};
+
+ static struct baz b3 = { 1, 2, {{0,0}} };
+ static struct baz b4 = { 1, 2, {{1,1}} };
+
+ static struct baz2 b5 = { 1, 2, {0} };
+ static struct baz2 b6 = { 1, 2, {1} };
+}