http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56379
--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> 2013-02-18 23:42:18 UTC --- Some debugging. If one adds the following debugging patch: --- a/libquadmath/strtod/strtod_l.c +++ b/libquadmath/strtod/strtod_l.c @@ -441,3 +441,5 @@ mpn_lshift_1 (mp_limb_t *ptr, mp_size_t size, unsigned int count, { +printf("1:mpn_lshift_1 ptr=%lu, size=%u, count=%u\n", ptr[0], size, count); (void) mpn_lshift (ptr, ptr, size, count); +printf("2:mpn_lshift_1 ptr=%lu, size=%u, count=%u\n", ptr[0], size, count); ptr[0] |= limb >> (BITS_PER_MP_LIMB - count); One gets with -O1 (for strtod/strtoflt128.c): 1:mpn_lshift_1 ptr=7640891576956012808, size=2, count=48 2:mpn_lshift_1 ptr=14485828201437200384, size=2, count=48 sqrt(2)=1.41421356237309504880168872420969798 r =1.41421356237309504880168872420969798 And with -O0 (for strtod/strtoflt128.c): 1:mpn_lshift_1 ptr=1, size=2, count=64 2:mpn_lshift_1 ptr=1, size=2, count=64 1:mpn_lshift_1 ptr=7640891576956012809, size=2, count=48 2:mpn_lshift_1 ptr=14486109676413911040, size=2, count=48 sqrt(2)=1.41421356237309504880168872420969798 r =1.41421356237309504885589883283397321 Note: "mpn_lshift" itself is in printf/lshift.c, which is compiled with default options, i.e. with -O2.