[Bug c/14374] New: valid unamed struct in a union rejected by gcc
ahs3 at fc dot hp dot com
gcc-bugzilla@gcc.gnu.org
Mon Mar 1 22:15:00 GMT 2004
If I understand the C standard, section 6.2.5, para 20, on union types
correctly, the following is valid C:
struct a {
int i;
};
struct b {
long l;
};
typedef union {
struct a;
struct b;
} MD;
int main ()
{
MD md;
return 0;
}
When compiled with gcc prior to 3.3, the code is accepted as valid. When
compiled with 3.3 or later versions, the compiler issues the following error:
junk2.c:11: warning: declaration does not declare anything
junk2.c:12: warning: declaration does not declare anything
These line numbers point to the unnamed structs within the union. This seems to
be related to previously closed bugs #6660, #8420 and #10225. If one uses the
-fms-extensions-switch as suggested in #10225, the code does compile. However,
I think this is valid c99 code, and not just a microsoft extension.
If a language lawyer can show me where these semantics are prohibited, then this
is invalid code; if a language lawyer cannot find the prohibition, then gcc
needs to revert to prior behavior and accept this code.
Thanks in advance for any clarification.
--
Summary: valid unamed struct in a union rejected by gcc
Product: gcc
Version: 3.3.3
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: ahs3 at fc dot hp dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: ia64-unknown-linux-gnu
GCC host triplet: ia64-unknown-linux-gnu
GCC target triplet: ia64-unknown-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14374
More information about the Gcc-bugs
mailing list