When expanding fabs inline, GCC attempts to use a sequence without jumps. If that sequence fails, GCC falls back to the equivalent of
if (x >= 0.0) return x; return -x; This sequence is incorrect for the IEEE floating point value -0.0. This problem normally does not occur because most architectures have an instruction to compute fabs or one can perform bit-twiddling, especially for software floating point emulation. However, for the cases such as software floating point emulation of long double, the jump sequence is produced, leading to wrong results for the corner case. -- Summary: expand_abs wrong default code for floating point Product: gcc Version: 4.2.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dje at gcc dot gnu dot org GCC build triplet: *-*-* GCC host triplet: *-*-* GCC target triplet: *-*-* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29253