http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54686
--- Comment #11 from Oleg Endo <olegendo at gcc dot gnu.org> 2012-09-23 21:50:37 UTC --- (In reply to comment #10) > (In reply to comment #8) > > Thanks god (or whoever) > > Would that make me a half-god? seems dangerous... > > > that the following: > > > > unsigned int test_xx (unsigned int a) > > { > > return std::abs (a); > > } > > > > ends up as a nop. *phew*. > > Try it with long (or long long) instead of int now... You really scared me now. unsigned long is also a nop. unsigned short is also a nop. unsigned char is also a nop. *drumroll* bool bleh (bool x) { return std::abs (x); } gets a fine floating treatment -- it is converted to double and then tested for != 0.0.