https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70166
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution|--- |INVALID
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
You are not accessing through the union type but through a pointer to double
and int because u.a and p->d decay to a pointer:
*(int *) &u.a = 1;
*(double *) &p->d = 0.0;
if (*(int *) &u.a != 0)
{
abort ();