[Bug libquadmath/56379] libquadmath: Wrong result for strtoflt128.c if compiled with -O0
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Feb 19 10:16:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56379
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-02-19 10:16:17 UTC ---
Yeah, the bug is obvious. glibc refuses to compile with -O0, so it was never a
problem for it.
The problem is that while mpn_lshift_1 function is always_inline, at -O0 the
__builtin_constant_p folds to 0 early in:
if (__builtin_constant_p (count) && count == BITS_PER_MP_LIMB)
and the else code isn't prepared to handle BITS_PER_MP_LIMB value.
The function is always either called with constant BITS_PER_MP_LIMB count, or
variable count that is always < BITS_PER_MP_LIMB, so it works fine for -O1+.
To fix this, either mpn_lshift_1 could be rewritten as macro, or as a macro
calling two different inline functions, or __builtin_constant_p (count) &&
could be guarded with #ifdef __OPTIMIZE__.
More information about the Gcc-bugs
mailing list