2 /* { dg-skip-if "PR68356 no math-errno on darwin" { "*-*-darwin*" } } */
3 /* { dg-add-options ieee } */
4 /* { dg-require-effective-target fenv_exceptions } */
5 /* { dg-skip-if "fenv" { powerpc-ibm-aix* } } */
11 extern void abort (void) __attribute__ ((noreturn
));
13 #define LARGE_NEG_MAYBE_ERANGE 0x01
14 #define LARGE_NEG_ERANGE 0x02
15 #define LARGE_POS_ERANGE 0x04
16 #define LARGE_NEG_EDOM 0x08
17 #define LARGE_POS_EDOM 0x10
19 #define LARGE_ERANGE (LARGE_NEG_ERANGE | LARGE_POS_ERANGE)
20 #define LARGE_EDOM (LARGE_NEG_EDOM | LARGE_POS_EDOM)
21 #define POWER_ERANGE (LARGE_NEG_MAYBE_ERANGE | LARGE_POS_ERANGE)
23 #define TEST(CALL, FLAGS) (CALL, tester (FLAGS))
28 static void (*tester
) (int);
31 check_quiet_nan (int flags
__attribute__ ((unused
)))
33 if (fetestexcept (FE_ALL_EXCEPT
))
40 check_large_neg (int flags
)
42 if (flags
& LARGE_NEG_MAYBE_ERANGE
)
44 int expected_errno
= (flags
& LARGE_NEG_ERANGE
? ERANGE
45 : flags
& LARGE_NEG_EDOM
? EDOM
47 if (expected_errno
!= errno
)
53 check_large_pos (int flags
)
55 int expected_errno
= (flags
& LARGE_POS_ERANGE
? ERANGE
56 : flags
& LARGE_POS_EDOM
? EDOM
58 if (expected_errno
!= errno
)
66 TEST (acos (d
), LARGE_EDOM
);
67 TEST (asin (d
), LARGE_EDOM
);
68 TEST (acosh (d
), LARGE_NEG_EDOM
);
69 TEST (atanh (d
), LARGE_EDOM
);
70 TEST (cosh (d
), LARGE_ERANGE
);
71 TEST (sinh (d
), LARGE_ERANGE
);
72 TEST (log (d
), LARGE_NEG_EDOM
);
73 #if defined (__sun__) && defined (__unix__)
74 /* Disabled due to a bug in Solaris libm. */
77 TEST (log2 (d
), LARGE_NEG_EDOM
);
78 TEST (log10 (d
), LARGE_NEG_EDOM
);
79 #if defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 22))
80 /* Disabled due to glibc PR 6792, fixed in glibc 2.22. */
83 TEST (log1p (d
), LARGE_NEG_EDOM
);
84 TEST (exp (d
), POWER_ERANGE
);
85 #if (defined (__sun__) || defined(__hppa__)) && defined (__unix__)
86 /* Disabled due to a bug in Solaris libm. HP PA-RISC libm doesn't support
91 TEST (exp2 (d
), POWER_ERANGE
);
92 #if defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 11))
93 /* Disabled due to glibc PR 6788, fixed in glibc 2.11. */
96 TEST (expm1 (d
), POWER_ERANGE
);
98 TEST (sqrt (d
), LARGE_NEG_EDOM
);
99 TEST (pow (100.0, d
), POWER_ERANGE
);
100 TEST (pow (i
, d
), POWER_ERANGE
);
108 d
= __builtin_nan ("");
109 tester
= check_quiet_nan
;
110 feclearexcept (FE_ALL_EXCEPT
);
114 tester
= check_large_neg
;
119 tester
= check_large_pos
;