https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95699
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Yeah, in the GCC9 case, there is jump threading of the __builtin_constant_p, so it is essentially if (r < 0x8000000000000000) printf ("%d\n", __builtin_constant_p (0) && 0 < 1); else printf ("%d\n", __builtin_constant_p (r * r) && r * r < 1); where in the first printf __builtin_constant_p evaluates to 1 and 0 < 1 too, while in the second one __builtin_constant_p (r * r) evaluates to 0. In GCC 10, this just doesn't happen, since r10-3106-g46dfa8ad6c18feb45d35734eae38798edb7c38cd aka PR90387 fix.