In this testcase: #include <stdio.h> int main() { union { unsigned __l; float __d; } U = { 0x7fc00000U }; printf("%f\n", U.__d); } The C front-end emits this: ... store float cast (uint 2143289344 to float), float* %tmp.1 ... which is obviously _very_ broken.
It was ugly, and it required implementation in two places, but this is now fixed. This is now tested here: SingleSource/Regression/C/2003-10-12-GlobalVarInitializers.c