https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90167
--- Comment #4 from Laszlo Ersek (RH) <lersek at redhat dot com> --- So one way to define the behavior for the original example (from the gcc docs) would be: int f(void) { double d = 3.0; union a_union u = *(union a_union *)&d; return u.i; } Thanks.