Viewing file: builtin-fp-int-inexact.c (1.36 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* 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
|