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.

Reply via email to