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: "joseph at codesourcery dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 20 Nov 2009 20:57:41 -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 #5 from joseph at codesourcery dot com 2009-11-20 20:57 -------
Subject: Re: g++ should warn or error on internal 0 size
array in struct
On Fri, 20 Nov 2009, david dot resnick at comverse dot com wrote:
> (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.
Several cases of C99 flexible array members that C99 does not permit are
only diagnosed as pedwarns-if-pedantic for C because of glibc using them.
(I gave an example in
<http://gcc.gnu.org/ml/gcc-patches/2002-08/msg01149.html>.) I haven't
looked into why it does this.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42121