On Tue, 19 Mar 2019, Michael Matz wrote:

> Hi,
> 
> On Tue, 19 Mar 2019, Richard Biener wrote:
> 
> > It doesn't really.  Consider the following IMHO valid testcase:
> > 
> > enum X { A, B };
> > enum Y { C, D };
> > void foo (int *p)
> > {
> >  *(enum X *)p = A;
> >  *(enum Y *)p = D;
> >  return *(enum X *)p;
> > }
> > 
> > int main()
> > {
> >   int storage;
> >   if (foo (&storage) != A)
> 
> (You want to require 'B' here, not 'A')

Eh, yes.  Actually D I guess, or simply 1.

> >     abort ();
> > }
> 
> If you want the above testcase to be valid then yes, I agree, you have to 
> give all enums the same alias set as the underlying type.  Meh, I don't 
> like it :-/

I think the C standard says the testcase should not abort.

The patch still needs approval though.  I'll make sure to add a testcase
like the above.

Richard.

Reply via email to