1  /* Test -fno-fp-int-builtin-inexact.  */
       2  /* { dg-do run } */
       3  /* { dg-options "-fno-fp-int-builtin-inexact" } */
       4  /* { dg-require-effective-target fenv_exceptions } */
       5  
       6  #include <fenv.h>
       7  
       8  /* Define functions locally to ensure that if the calls are not
       9     expanded inline, failures do not occur because of libm raising
      10     "inexact".  */
      11  
      12  #define LOCAL_FN(NAME, TYPE)			\
      13    __attribute__ ((noinline, noclone)) TYPE	\
      14    NAME (TYPE x)					\
      15    {						\
      16      return x;					\
      17    }
      18  
      19  #define LOCAL_FNS(NAME)				\
      20    LOCAL_FN (NAME, double)			\
      21    LOCAL_FN (NAME ## f, float)			\
      22    LOCAL_FN (NAME ## l, long double)
      23  
      24  LOCAL_FNS (ceil)
      25  LOCAL_FNS (floor)
      26  LOCAL_FNS (round)
      27  LOCAL_FNS (trunc)
      28  
      29  extern void abort (void);
      30  extern void exit (int);
      31  
      32  #define TEST(FN, TYPE)				\
      33    do						\
      34      {						\
      35        volatile TYPE a = 1.5, b;			\
      36        b = FN (a);				\
      37        if (fetestexcept (FE_INEXACT))		\
      38  	abort ();				\
      39      }						\
      40    while (0)
      41  
      42  #define FN_TESTS(FN)					\
      43    do							\
      44      {							\
      45        TEST (__builtin_ ## FN, double);			\
      46        TEST (__builtin_ ## FN ## f, float);		\
      47        TEST (__builtin_ ## FN ## l, long double);	\
      48      }							\
      49    while (0)
      50  
      51  static void
      52  main_test (void)
      53  {
      54    FN_TESTS (ceil);
      55    FN_TESTS (floor);
      56    FN_TESTS (round);
      57    FN_TESTS (trunc);
      58  }
      59  
      60  /* This file may be included by architecture-specific tests.  */
      61  
      62  #ifndef ARCH_MAIN
      63  
      64  int
      65  main (void)
      66  {
      67    main_test ();
      68    exit (0);
      69  }
      70  
      71  #endif