https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71475
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |INVALID --- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> --- So you're trying to construct Intel extended double with 0x4141414141414141LL mantissa, 0 MSB of mantissa, exponent 0x4141 and sign bit of 0. E.g. https://en.wikipedia.org/wiki/Extended_precision says on this: Unnormal. Only generated on the 8087 and 80287. The 80387 and later treat this as an invalid operand. I think you are just in the teritory of undefined behavior this, glibc probably doesn't check carefully enough that the value you're passing to it the first time is invalid, and in the second time, the compiler when it sees invalid value as it transforms it into its internal representation and back, it transforms it into something valid.