blob: b192d38a730bbee97fb9bb370ee494e55d43e880 [file] [log] [blame]
/* 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