This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/42121] g++ should warn or error on internal 0 size array in struct
- From: "david dot resnick at comverse dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 20 Nov 2009 18:56:29 -0000
- Subject: [Bug c++/42121] g++ should warn or error on internal 0 size array in struct
- References: <bug-42121-18470@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #4 from david dot resnick at comverse dot com 2009-11-20 18:56 -------
(In reply to comment #3)
> (In reply to comment #2)
> > In standard C, a size 0 array is forbidden, at least in C99 doc I have handy,
> Yes, but it's a long-standing GNU extension:
> http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Zero-Length.html#Zero-Length
> The C++ front end says:
> /* As an extension we allow zero-sized arrays. We always allow
> them in system headers because glibc uses them. */
> Maybe the C++ front-end could be made stricter, so that it accepts char b[0]
> (like the C front end) but not char b[] (which is a C99 flexible array member,
> and must be the last member)
OK, but if you read that link the whole rationale is to do with it being the
last field in a struct, not an internal member, right? Seems like there is no
possible use in an internal member, and not diagnosing this as warnable means
you don't notice if, say, someone accidentally adds something after the
flexible array member. Which happened to us, which is why I noticed this
issue. If this will break existing usage, I see the reason not to change. But
I'm curious what possible use a non-terminal zero sized array in a struct might
have.
-David
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42121