/* 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