https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126464

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|[16/17 Regression] wrong    |[16/17 Regression] wrong
                   |code with FP ranges         |code with FP ranges since
                   |                            |r16-1108

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
It is indeed that commit.
Slightly improved testcase:

[[gnu::noipa]] double
foo (double x)
{
  float y = (float) x;

  if (y == -__builtin_inff ())
    return x * 0.5;
  return y;
}

[[gnu::noipa]] long double
bar (long double x)
{
  double y = (double) x;

  if (y == __builtin_inf ())
    return x * 0.5L;
  return y;
}

int
main ()
{
  if (!__builtin_isinf ((double) 1e300)
      && __builtin_isinf ((float) 1e300)
      && foo (-1e300) != -5e299)
    __builtin_abort ();

  if (!__builtin_isinf ((long double) 1e4000L)
      && __builtin_isinf ((double) 1e4000L)
      && bar (1e4000L) != 5e3999L)
    __builtin_abort ();
}

Reply via email to