(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
torture/
pr52451.c
       1  /* { dg-do run } */
       2  /* { dg-add-options ieee } */
       3  /* { dg-require-effective-target fenv_exceptions_long_double } */
       4  /* { dg-skip-if "fenv" { powerpc-ibm-aix* } } */
       5  
       6  #include <fenv.h>
       7  
       8  #define TEST_C_NOEX(CMP, S)			\
       9    r = nan##S CMP arg##S;			\
      10    if (fetestexcept (FE_INVALID))		\
      11      __builtin_abort ()
      12  
      13  #define TEST_B_NOEX(FN, S)			\
      14    r = __builtin_##FN (nan##S, arg##S);		\
      15    if (fetestexcept (FE_INVALID))		\
      16      __builtin_abort ()
      17  
      18  #define TEST_C_EX(CMP, S)			\
      19    r = nan##S CMP arg##S;			\
      20    if (!fetestexcept (FE_INVALID))		\
      21      __builtin_abort ();				\
      22    feclearexcept (FE_INVALID)
      23  
      24  #define TEST(TYPE, S)				\
      25    volatile TYPE nan##S = __builtin_nan##S ("");	\
      26    volatile TYPE arg##S = 1.0##S;		\
      27  						\
      28    TEST_C_NOEX (==, S);				\
      29    TEST_C_NOEX (!=, S);				\
      30  						\
      31    TEST_B_NOEX (isgreater, S);			\
      32    TEST_B_NOEX (isless, S);			\
      33    TEST_B_NOEX (isgreaterequal, S);		\
      34    TEST_B_NOEX (islessequal, S);			\
      35  						\
      36    TEST_B_NOEX (islessgreater, S);		\
      37    TEST_B_NOEX (isunordered, S);			\
      38  						\
      39    TEST_C_EX (>, S);				\
      40    TEST_C_EX (<, S);				\
      41    TEST_C_EX (>=, S);				\
      42    TEST_C_EX (<=, S)
      43  
      44  int
      45  main (void)
      46  {
      47    volatile int r;
      48  
      49    feclearexcept (FE_INVALID);
      50  
      51    TEST (float, f);
      52    TEST (double, );
      53  #if !defined(__hppa__) || !defined(__hpux__)
      54    /* Long double on hppa*-hpux* is implemented in software and the routines
      55       in fenv.h do not support it.  */
      56    TEST (long double, l);
      57  #endif
      58    
      59    return 0;
      60  }