TRANLE@INTELLICORP.COM (Minh Tran-Le) (01/17/90)
gcc 1.36 does not seems to be able to compile the following file:
/* -- start of file test.c -- */
typedef union _MyUnion {
char * str;
long uval;
} MyUnion;
typedef struct _MyStruct {
MyUnion name;
} MyStruct;
MyStruct abc = { 0 };
/* -- end of file test.c -- */
Here is what I got when trying to compile it:
1 paris:mtranle> gcc -c -v test.c
gcc version 1.36
/usr/local/lib/gcc-cpp -v -undef -D__GNUC__ -Dunix -Di386 -DAIX -D__unix__ -D__i386__ -D__AIX__ test.c /tmp/ccaaafOu.cpp
GNU CPP version 1.36
/usr/local/lib/gcc-cc1 /tmp/ccaaafOu.cpp -quiet -dumpbase test.c -version -o /tmp/ccaaafOu.s
GNU C version 1.36 (80386, ATT syntax) compiled by GNU C version 1.36.
default target switches: -m80387
test.c:11: type mismatch in initialization
2 paris:mtranle>
Does anybody knows about a fix or a work around for it ?
Thanks, Tran-Le.
Arpanet: tranle@intellicorp.com
uucp: ..sun!icmv!mtranle
-------alexande@unc.cs.unc.edu (Geoffrey D. Alexander) (01/18/90)
K&R, 2nd edition states the following in section A8.7 (bottom of page 219):
The initializer for a union is either a single expression of the same
type, or a brace-enclosed initializer for the first member of the union.
Note that MyStruct has one member of type MyUnion. Since type MyUnion is a
union, it must either be initialize by an expression of type MyUnion or an
brace_enclosed initializer for the first member of the union which has type
char*. I assume you wish to initialize abc.name to 0. To do this, you must
have two set of braces:
MyStruct abc = { {0} }
This compiles without error under gcc 1.36 on a Sun-3M60 running SunOS 4.0.3.
I don't believe the problem you reported is a bug.
Geoff Alexanderalexande@unc.cs.unc.edu (Geoffrey D. Alexander) (01/21/90)
In article <11506@thorin.cs.unc.edu> I write: >K&R, 2nd edition states the following in section A8.7 (bottom of page 219): > > The initializer for a union is either a single expression of the same > type, or a brace-enclosed initializer for the first member of the union. > >Note that MyStruct has one member of type MyUnion. Since type MyUnion is a >union, it must either be initialize by an expression of type MyUnion or an >brace_enclosed initializer for the first member of the union which has type >char*. I assume you wish to initialize abc.name to 0. To do this, you must >have two set of braces: > > MyStruct abc = { {0} } > >This compiles without error under gcc 1.36 on a Sun-3M60 running SunOS 4.0.3. >I don't believe the problem you reported is a bug. > >Geoff Alexander If have been informed, although K&R 2ed doesn't mention it, that the ANSI standard allows the inner set of braces to be dropped in this case. The problem reported is actually a bug. However, the work-around is to use two sets of braces until there is a fix. Geoff Alexander