(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
torture/
pr91323.c
       1  /* { dg-do run } */
       2  /* { dg-add-options ieee } */
       3  /* { dg-require-effective-target fenv_exceptions } */
       4  /* { dg-skip-if "fenv" { powerpc-ibm-aix* } } */
       5  
       6  #include <fenv.h>
       7  
       8  int
       9  __attribute__ ((noinline, noclone))
      10  f1 (float a, float b)
      11  {
      12    return __builtin_isless (a, b) || __builtin_isgreater (a, b);
      13  }
      14  
      15  int
      16  __attribute__ ((noinline, noclone))
      17  f2 (float a, float b)
      18  {
      19    return __builtin_islessgreater (a, b);
      20  }
      21  
      22  int
      23  __attribute__ ((noinline, noclone))
      24  f3 (float a, float b)
      25  {
      26    return a < b || a > b;
      27  }
      28  
      29  int
      30  main (void)
      31  {
      32    volatile int r;
      33  
      34    float nanf = __builtin_nanf ("");
      35    float argf = 1.0f;
      36  
      37    feclearexcept (FE_INVALID);
      38  
      39    r = f1 (nanf, argf);
      40    if (r != 0 || fetestexcept (FE_INVALID))
      41      __builtin_abort ();
      42  
      43    r = f2 (nanf, argf);
      44    if (r != 0 || fetestexcept (FE_INVALID))
      45      __builtin_abort ();
      46  
      47    r = f3 (nanf, argf);
      48    if (r != 0 || !fetestexcept (FE_INVALID))
      49      __builtin_abort ();
      50  
      51    return 0;
      52  }