Full example files are here: http://www.pvv.ntnu.no/~larschri/cast-bug/ The compiled program fails to do binary conversion between float and int. Both sizeof(int) and sizeof(float) is 4, so the two floats below should have the same binary representation after being written/read to/from the integer object. float f1 = 4.5; int i = *((int*)&f1); float f2 = *((float*)&i); assert(f1 == f2); $ gcc --version gcc (GCC) 4.0.1 20050727 (Red Hat 4.0.1-5) Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ gcc -O2 -march=i686 cast-bug.c $ ./a.out a.out: cast-bug.c:8: main: Assertion `f1 == f2' failed. Aborted
Created attachment 9739 [details] .i file that triggers the bug.
Your code violates ISO C aliasing rules. See the docs about -fstrict-aliasing.
I see - thanks! I didn't use the -Wall options when changing from C++ to C. g++ had the same problem, but didn't give any warnings with -Wall.
I have filed this enhancment ticket: [Bug c++/23915]
Reopening to ...
Mark as a dup of bug 21920. *** This bug has been marked as a duplicate of 21920 ***