/* Test -fno-fp-int-builtin-inexact.  */
/* { dg-do run } */
/* { dg-options "-fno-fp-int-builtin-inexact" } */
/* { dg-require-effective-target fenv_exceptions } */

#include <fenv.h>

/* Define functions locally to ensure that if the calls are not
   expanded inline, failures do not occur because of libm raising
   "inexact".  */

#define LOCAL_FN(NAME, TYPE)			\
  __attribute__ ((noinline, noclone)) TYPE	\
  NAME (TYPE x)					\
  {						\
    return x;					\
  }

#define LOCAL_FNS(NAME)				\
  LOCAL_FN (NAME, double)			\
  LOCAL_FN (NAME ## f, float)			\
  LOCAL_FN (NAME ## l, long double)

LOCAL_FNS (ceil)
LOCAL_FNS (floor)
LOCAL_FNS (round)
LOCAL_FNS (trunc)

extern void abort (void);
extern void exit (int);

#define TEST(FN, TYPE)				\
  do						\
    {						\
      volatile TYPE a = 1.5, b;			\
      b = FN (a);				\
      if (fetestexcept (FE_INEXACT))		\
	abort ();				\
    }						\
  while (0)

#define FN_TESTS(FN)					\
  do							\
    {							\
      TEST (__builtin_ ## FN, double);			\
      TEST (__builtin_ ## FN ## f, float);		\
      TEST (__builtin_ ## FN ## l, long double);	\
    }							\
  while (0)

static void
main_test (void)
{
  FN_TESTS (ceil);
  FN_TESTS (floor);
  FN_TESTS (round);
  FN_TESTS (trunc);
}

/* This file may be included by architecture-specific tests.  */

#ifndef ARCH_MAIN

int
main (void)
{
  main_test ();
  exit (0);
}

#endif
