/* { dg-do run } */ /* { dg-require-effective-target fenv_exceptions } */ /* { dg-options "-lm -fno-builtin" } */ /* This testcase ensures that the builtins is correctly expanded and match the expected result from the standard function. "-fno-builtin" option is used to enable calls to libc implementation of the gcc builtins tested when not using __builtin_ prefix. */ #include #ifdef DEBUG #include #define FAIL(v, e) printf("ERROR, __builtin_fegetround() returned %d," \ " not the expecected value %d\n", v, e); #else void abort (void); #define FAIL(v, e) abort() #endif int main () { int i, rounding, expected; const int rm[] = {FE_TONEAREST, FE_TOWARDZERO, FE_UPWARD, FE_DOWNWARD}; for (i = 0; i < sizeof rm / sizeof rm[0]; i++) { fesetround(rm[i]); rounding = __builtin_fegetround(); expected = fegetround(); if (rounding != expected) FAIL(rounding, expected); } return 0; }