This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Undefined behavior due to 6.5.16.1p3


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...).

-- 
Vincent Lefèvre <vincent@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]