Bug 52182 - unnamed structs/unions are supported by ISO C99
Summary: unnamed structs/unions are supported by ISO C99
Status: RESOLVED INVALID
Alias: None
Product: gcc
Classification: Unclassified
Component: c (show other bugs)
Version: 4.6.3
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-02-09 09:19 UTC by Jan Kratochvil
Modified: 2012-02-09 17:42 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jan Kratochvil 2012-02-09 09:19:48 UTC
http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed-Fields
says
"As permitted by ISO C11"

and also:
echo 'struct { int a; struct { int b; }; } s;'|gcc -c -x c - -Wall -std=c99 -pedantic
<stdin>:1:34: warning: ISO C99 doesn’t support unnamed structs/unions [-pedantic]
FAIL: gcc (GCC) 4.6.3 20120209 (prerelease)
FAIL: gcc (GCC) 4.7.0 20120209 (experimental)

plus
FAIL: gcc (GCC) 4.4.7 20120209 (prerelease)
FAIL: gcc (GCC) 4.5.4 20120209 (prerelease)
print
<stdin>:1:34: warning: declaration does not declare anything

But ISO C99 says:
  A structure type describes a sequentially allocated nonempty set of member
  objects (and, in certain circumstances, an incomplete array), each of which
  has an optionally specified name and possibly distinct type.
         ^^^^^^^^^^^^^^^^^^^^^^^^^
  A union type describes an overlapping nonempty set of member objects, each of
  which has an optionally specified name and possibly distinct type.
               ^^^^^^^^^^^^^^^^^^^^^^^^^

(I agree ISO C90 spec still did not support unnamed fields.)
Comment 1 jsm-csl@polyomino.org.uk 2012-02-09 17:23:59 UTC
On Thu, 9 Feb 2012, jan.kratochvil at redhat dot com wrote:

> But ISO C99 says:
>   A structure type describes a sequentially allocated nonempty set of member
>   objects (and, in certain circumstances, an incomplete array), each of which
>   has an optionally specified name and possibly distinct type.
>          ^^^^^^^^^^^^^^^^^^^^^^^^^

The name is only optional for bit-fields.  See the syntax for 
struct-declaration and struct-declarator.  The difference in C11 is that a 
struct-declarator-list is optional in a struct-declaration.
Comment 2 Jan Kratochvil 2012-02-09 17:42:30 UTC
That there can be struct { int:10; }, OK.  Thanks for the explanation.