This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [patch/rfc] Test struct0
On Wed, Feb 04, 2004 at 10:52:09AM -0500, Andrew Cagney wrote:
> >On Tue, Feb 03, 2004 at 07:06:47PM -0500, Andrew Cagney wrote:
> >
> >>Hello,
> >>
> >>This adds a test for:
> >>
> >> struct foo0 { };
> >>
> >>to the structs.exp testcase (I'm assuming that this is legal ISO-C), it
> >
> >
> >Nope.
>
> I guess I misunderstood Jim's comments.
> http://sources.redhat.com/ml/gdb-patches/2004-01/msg00717.html
Hmm, the comment isn't very clear. Yes, this is a GNU extension
(though not many people seem to know it).
> > struct-or-union-specifier:
> > struct-or-union identifier-opt { struct-declaration-list }
> > struct-or-union identifier
> >
> > struct-or-union:
> > struct
> > union
> >
> > struct-declaration-list:
> > struct-declaration
> > struct-declaration-list struct-declaration
> >
> > struct-declaration:
> > specifier-qualifier-list struct-declarator-list ;
> >
> >So there must be a minimum of one declarator and trailing semicolon
> >inside the braces. GCC will warn about this if you ask it to - it's
> >probably -ansi, or -std=c89 -ansi -pedantic.
>
> >While it's not legal C, I believe that it is legal C++.
>
> But are you sure? :-) If it's legal C++ then it, along with some other
> wierd-o edge cases should probably be added to a gdb.cp/struct0 test
> (someone with less rusty C++ than me can probably come up with a list).
>
> Trying to include it in structs.exp would just be too messy.
Yeah. Of course, there's the interesting property that zero-element
structures have non-zero size in C++. That's because they're a
first-class part of the language. Consider:
struct foo { };
struct foo bar[10];
int baz = sizeof (bar);
In GNU C, baz is initialized to zero. In GNU C++ (i386-linux, but I
think all targets since the v3 ABI covers this), baz is initialized to
ten. One byte per zero-sized struct is wasted in order to preserve
monotonically increasing array element addresses. Then, in some cases
(all dealing with base classes), the one byte is optimized away again.
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer