[PATCH] Allow relayout_decl on FIELD_DECLs (PR c/72816)

Marek Polacek polacek@redhat.com
Mon Aug 8 11:53:00 GMT 2016


On Mon, Aug 08, 2016 at 11:04:32AM +0000, Joseph Myers wrote:
> On Sat, 6 Aug 2016, Jakub Jelinek wrote:
> 
> > --- gcc/testsuite/gcc.dg/pr72816.c.jj	2016-08-06 13:06:45.046003282 +0200
> > +++ gcc/testsuite/gcc.dg/pr72816.c	2016-08-06 13:07:57.217093845 +0200
> > @@ -0,0 +1,9 @@
> > +/* PR c/72816 */
> > +/* { dg-do compile } */
> > +/* { dg-options "-std=gnu11" } */
> > +
> > +typedef const int A[];
> > +struct S {
> > +  int a;
> > +  A b;	/* { dg-error "array size missing" } */
> > +};
> 
> As far as I can tell, this is actually valid code that should not produce 
> an error; the type of a flexible array member can be given by a typedef, 
> and I see nothing to disallow it being given by a typedef for an array of 
> qualified type.  Note that both the version of this test without const, 
> and the version with const but not using a typedef, are accepted.

I was looking into this last week a bot and the problem seems to be that for
typedefs the array 'b' doesn't have TYPE_DOMAIN, so its type is in fact
const int b[<unknown>] (so the code tries to deduce the size of the array
which fails) whereas without typedef the type is const int b[0:].  I thought
this discrepancy was the core issue here.

	Marek



More information about the Gcc-patches mailing list