Commit c4882eba authored by ghazi's avatar ghazi
Browse files

* c-typeck.c (process_init_element): Avoid union init warnings on

	floating point zero.  Don't crash on unions containing structs.

testsuite:
	* gcc.dg/wtr-union-init-2.c, gcc.dg/wtr-union-init-3.c: New tests.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36358 138bc75d-0d04-0410-961f-82ee72b054a4
parent 480d8945
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
......
......@@ -6394,7 +6394,8 @@ process_init_element (value)
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.
......
/* 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};
}
/* 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} };
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment