On Wed, Mar 11, 2015 at 05:08:16PM +0100, Vincent Lefevre wrote:
> On 2015-03-11 14:27:25 +0100, Robbert Krebbers wrote:
> > But what about "long long" on 32 bits machines. For example:
> > 
> > union {
> >   long long a;
> >   struct { char b1; long long b2; } b;
> > } u;
> > 
> > Will GCC perform similar optimizations as for the case of big structs? I
> > tried to play around with long long in Martin's example, but failed to
> > trigger "unexpected" behaviors in GCC.
> 
> I've not tried, but how about something like:
> 
> struct S { long a, b, c, d; };
> union U {
>   struct S a;
>   struct { char b1; struct S b2; } b;
> };
> u.b.b2 = u.a;
> 
> or: u.a = u.b.b2;
> 
> IMHO, struct S should be large enough to avoid using registers as
> a temporary area (just in case...).

There is some PR about it in our bugzilla, and the conclusion is that
it is both invalid (in C only one union member can be active at any time,
we as extension allow type punning through unions etc.)
and we really don't want to support it.

        Jakub

Reply via email to