https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95740
--- Comment #3 from Gabriel Ravier <gabravier at gmail dot com> --- I've also encountered what looks like a duplicate of this bug, although I'm not sure but it seems likely: int foo(float f) { union { float f; int i; } z = { .f = f }; return z.i - 1; } Which outputs roughly the same assembly code as the initial test case.