http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49338
--- Comment #8 from Hans Meier <hsmeier at arcor dot de> 2011-06-09 09:44:28 UTC --- (In reply to comment #7) > It isn't hard to rewrite it using an union: a similar solution with a union was one of my earlier attempts to performance-optimize our code. unfortunately this lead to a horrible performance degrade - the critical realtime thread of our application was 60% slower then. analysis showed that things were not kept in registers but instead we had a fp push and pop in the assembly (with 4.5.1). the code looked like this: union{double d;U8 uc[8];} rv; rv.d=m_Value.Value; rv.uc[0]=rv.uc[0] & ~((U8)1); return rv.d; maybe your version with U64 instead of double at the input to the union doesn't suffer this performance penalty, so i will try it and if it performs good i certainly will switch to this solution. otherwise yes, -Wstrict-aliasing=1 and -Wstrict-aliasing=2 both warn, I just thought -Wstrict-aliasing which in fact is described as being equivalent to -Wstrict-aliasing=3 and thus included in -Wall would detect more than =1 or =2 so far and most important, thanks a lot for the immediate help!