Type punning/aliasing with unions is well defined in gcc. Linus even has a humorous rant about it on the topic:
https://www.yodaiken.com/2018/06/07/torvalds-on-aliasing/
Sure, it's compiler-specific, but I'm already using `__attribute__((packed))` anyways.