/* { dg-do run } */ /* { dg-require-effective-target fenv_exceptions } */ /* { dg-options "-lm -fno-builtin" } */ /* This testcase ensures that the builtins expand with the matching arguments or otherwise fallback gracefully to a function call, and don't ICE during compilation. "-fno-builtin" option is used to enable calls to libc implementation of the gcc builtins tested when not using __builtin_ prefix. */ #include int main () { int rsi = 0; long rsl = 0; short rss = 0; char rsc = 0; unsigned int rui = 0; unsigned long rul = 0; unsigned short rus = 0; unsigned char ruc = 0; int e = FE_DIVBYZERO; __builtin_feclearexcept(e); // CALL __builtin_feclearexcept(FE_ALL_EXCEPT); // CALL __builtin_feclearexcept(FE_INVALID); // CALL __builtin_feclearexcept(FE_INVALID | FE_INEXACT); // CALL __builtin_feclearexcept(FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW); // EXPAND __builtin_feclearexcept(FE_INEXACT | FE_OVERFLOW); // EXPAND __builtin_feclearexcept(FE_INEXACT); // EXPAND __builtin_feclearexcept(FE_DIVBYZERO); // EXPAND __builtin_feclearexcept(FE_UNDERFLOW); // EXPAND __builtin_feclearexcept(FE_OVERFLOW); // EXPAND __builtin_feclearexcept(0); // EXPAND rsi = __builtin_feclearexcept(FE_DIVBYZERO); // EXPAND rsl = __builtin_feclearexcept(FE_DIVBYZERO); // EXPAND rss = __builtin_feclearexcept(FE_DIVBYZERO); // EXPAND rsc = __builtin_feclearexcept(FE_DIVBYZERO); // EXPAND rui = __builtin_feclearexcept(FE_DIVBYZERO); // EXPAND rul = __builtin_feclearexcept(FE_DIVBYZERO); // EXPAND rus = __builtin_feclearexcept(FE_DIVBYZERO); // EXPAND ruc = __builtin_feclearexcept(FE_DIVBYZERO); // EXPAND __builtin_feraiseexcept(e); // CALL __builtin_feraiseexcept(FE_ALL_EXCEPT); // CALL __builtin_feraiseexcept(FE_INVALID); // CALL __builtin_feraiseexcept(FE_INVALID | FE_INEXACT); // CALL __builtin_feraiseexcept(FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW); // EXPAND __builtin_feraiseexcept(FE_INEXACT | FE_OVERFLOW); // EXPAND __builtin_feraiseexcept(FE_INEXACT); // EXPAND __builtin_feraiseexcept(FE_DIVBYZERO); // EXPAND __builtin_feraiseexcept(FE_UNDERFLOW); // EXPAND __builtin_feraiseexcept(FE_OVERFLOW); // EXPAND __builtin_feraiseexcept(0); // EXPAND rsi = __builtin_feraiseexcept(FE_DIVBYZERO); // EXPAND rsl = __builtin_feraiseexcept(FE_DIVBYZERO); // EXPAND rss = __builtin_feraiseexcept(FE_DIVBYZERO); // EXPAND rsc = __builtin_feraiseexcept(FE_DIVBYZERO); // EXPAND rui = __builtin_feraiseexcept(FE_DIVBYZERO); // EXPAND rul = __builtin_feraiseexcept(FE_DIVBYZERO); // EXPAND rus = __builtin_feraiseexcept(FE_DIVBYZERO); // EXPAND ruc = __builtin_feraiseexcept(FE_DIVBYZERO); // EXPAND return 0; }