+2013-04-26 Joseph Myers <joseph@codesourcery.com>
+
+ [BZ #15405]
+ * math/s_ccosh.c (__ccosh): Ensure underflow exception occurs for
+ underflowed result.
+ * math/s_ccoshf.c (__ccoshf): Likewise.
+ * math/s_ccoshl.c (__ccoshl): Likewise.
+ * math/s_csin.c (__csin): Likewise.
+ * math/s_csinf.c (__csinf): Likewise.
+ * math/s_csinh.c (__csinh): Likewise.
+ * math/s_csinhf.c (__csinhf): Likewise.
+ * math/s_csinhl.c (__csinhl): Likewise.
+ * math/s_csinl.c (__csinl): Likewise.
+ * math/libm-test.inc (ccos_test): Add more tests.
+ (ccosh_test): Likewise.
+ (csin_test): Likewise.
+ (csinh_test): Likewise.
+
2013-04-26 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
* sysdeps/powerpc/power5/fpu/s_modf.c: Moved to ...
14812, 14888, 14920, 14964, 14981, 14982, 14985, 14994, 14996, 15003,
15006, 15020, 15023, 15036, 15054, 15055, 15062, 15078, 15160, 15214,
15232, 15234, 15283, 15285, 15287, 15304, 15305, 15307, 15309, 15327,
- 15330, 15335, 15336, 15337, 15342, 15346, 15361, 15366, 15394.
+ 15330, 15335, 15336, 15337, 15342, 15346, 15361, 15366, 15394, 15405.
* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
#15078).
TEST_c_c (ccos, 0x1p-16434L, 22730, plus_infty, -1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
#endif
+ TEST_c_c (ccos, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
+ TEST_c_c (ccos, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
+
END (ccos, complex);
}
TEST_c_c (ccosh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
#endif
+ TEST_c_c (ccosh, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
+ TEST_c_c (ccosh, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
+
END (ccosh, complex);
}
TEST_c_c (csin, 0x1p-16434L, 22730, 1.217853148905605987081057582351152052687e4924L, plus_infty, OVERFLOW_EXCEPTION);
#endif
+ TEST_c_c (csin, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
+ TEST_c_c (csin, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
+
END (csin, complex);
}
TEST_c_c (csinh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
#endif
+ TEST_c_c (csinh, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
+ TEST_c_c (csinh, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
+
END (csinh, complex);
}
__real__ retval = __ieee754_cosh (__real__ x) * cosix;
__imag__ retval = __ieee754_sinh (__real__ x) * sinix;
}
+
+ if (fabs (__real__ retval) < DBL_MIN)
+ {
+ volatile double force_underflow
+ = __real__ retval * __real__ retval;
+ (void) force_underflow;
+ }
+ if (fabs (__imag__ retval) < DBL_MIN)
+ {
+ volatile double force_underflow
+ = __imag__ retval * __imag__ retval;
+ (void) force_underflow;
+ }
}
else
{
__real__ retval = __ieee754_coshf (__real__ x) * cosix;
__imag__ retval = __ieee754_sinhf (__real__ x) * sinix;
}
+
+ if (fabsf (__real__ retval) < FLT_MIN)
+ {
+ volatile float force_underflow
+ = __real__ retval * __real__ retval;
+ (void) force_underflow;
+ }
+ if (fabsf (__imag__ retval) < FLT_MIN)
+ {
+ volatile float force_underflow
+ = __imag__ retval * __imag__ retval;
+ (void) force_underflow;
+ }
}
else
{
__real__ retval = __ieee754_coshl (__real__ x) * cosix;
__imag__ retval = __ieee754_sinhl (__real__ x) * sinix;
}
+
+ if (fabsl (__real__ retval) < LDBL_MIN)
+ {
+ volatile long double force_underflow
+ = __real__ retval * __real__ retval;
+ (void) force_underflow;
+ }
+ if (fabsl (__imag__ retval) < LDBL_MIN)
+ {
+ volatile long double force_underflow
+ = __imag__ retval * __imag__ retval;
+ (void) force_underflow;
+ }
}
else
{
if (negate)
__real__ retval = -__real__ retval;
+
+ if (fabs (__real__ retval) < DBL_MIN)
+ {
+ volatile double force_underflow
+ = __real__ retval * __real__ retval;
+ (void) force_underflow;
+ }
+ if (fabs (__imag__ retval) < DBL_MIN)
+ {
+ volatile double force_underflow
+ = __imag__ retval * __imag__ retval;
+ (void) force_underflow;
+ }
}
else
{
if (negate)
__real__ retval = -__real__ retval;
+
+ if (fabsf (__real__ retval) < FLT_MIN)
+ {
+ volatile float force_underflow
+ = __real__ retval * __real__ retval;
+ (void) force_underflow;
+ }
+ if (fabsf (__imag__ retval) < FLT_MIN)
+ {
+ volatile float force_underflow
+ = __imag__ retval * __imag__ retval;
+ (void) force_underflow;
+ }
}
else
{
if (negate)
__real__ retval = -__real__ retval;
+
+ if (fabs (__real__ retval) < DBL_MIN)
+ {
+ volatile double force_underflow
+ = __real__ retval * __real__ retval;
+ (void) force_underflow;
+ }
+ if (fabs (__imag__ retval) < DBL_MIN)
+ {
+ volatile double force_underflow
+ = __imag__ retval * __imag__ retval;
+ (void) force_underflow;
+ }
}
else
{
if (negate)
__real__ retval = -__real__ retval;
+
+ if (fabsf (__real__ retval) < FLT_MIN)
+ {
+ volatile float force_underflow
+ = __real__ retval * __real__ retval;
+ (void) force_underflow;
+ }
+ if (fabsf (__imag__ retval) < FLT_MIN)
+ {
+ volatile float force_underflow
+ = __imag__ retval * __imag__ retval;
+ (void) force_underflow;
+ }
}
else
{
if (negate)
__real__ retval = -__real__ retval;
+
+ if (fabsl (__real__ retval) < LDBL_MIN)
+ {
+ volatile long double force_underflow
+ = __real__ retval * __real__ retval;
+ (void) force_underflow;
+ }
+ if (fabsl (__imag__ retval) < LDBL_MIN)
+ {
+ volatile long double force_underflow
+ = __imag__ retval * __imag__ retval;
+ (void) force_underflow;
+ }
}
else
{
if (negate)
__real__ retval = -__real__ retval;
+
+ if (fabsl (__real__ retval) < LDBL_MIN)
+ {
+ volatile long double force_underflow
+ = __real__ retval * __real__ retval;
+ (void) force_underflow;
+ }
+ if (fabsl (__imag__ retval) < LDBL_MIN)
+ {
+ volatile long double force_underflow
+ = __imag__ retval * __imag__ retval;
+ (void) force_underflow;
+ }
}
else
{