@djb fwiw i agree @barubary; to me is same as:
int u = 0x7f987654;
return isnan(*(float*)&u);
which accesses object u via incompatible type. c11 §6.5 paragraph 7.
i have never been able to understand if using unions to pun is well-defined; i always fall back to memcpy :/