Fix ldbl-128 log1pl (-qNaN) spurious "invalid" exception (bug 19189).

The ldbl-128 version of log1pl raises a spurious "invalid" exception
for a -qNaN argument.  This patch fixes this by making the initial
check for infinities and NaNs handle arguments of both signs in such a
way that NaNs result in a NaN being returned (quietly if the input NaN
was quiet) while +Inf results in +Inf being returned and -Inf results
in a qNaN being returned with "invalid" exception raised.

Tested for mips64.

	[BZ #19189]
	* sysdeps/ieee754/ldbl-128/s_log1pl.c (__log1pl): Make check for
	non-finite argument handle arguments with negative sign.
This commit is contained in:
Joseph Myers 2015-10-29 23:09:51 +00:00
parent 68b7f7df0c
commit af1b2fd083
3 changed files with 7 additions and 3 deletions

View File

@ -1,5 +1,9 @@
2015-10-29 Joseph Myers <joseph@codesourcery.com>
[BZ #19189]
* sysdeps/ieee754/ldbl-128/s_log1pl.c (__log1pl): Make check for
non-finite argument handle arguments with negative sign.
* math/libm-test.inc (j0_test_data): Do not test sign of zero
result from infinite argument.
(j1_test_data): Likewise.

2
NEWS
View File

@ -21,7 +21,7 @@ Version 2.23
18966, 18967, 18969, 18970, 18977, 18980, 18981, 18982, 18985, 19003,
19007, 19012, 19016, 19018, 19032, 19046, 19048, 19049, 19050, 19059,
19071, 19074, 19076, 19077, 19078, 19079, 19085, 19086, 19088, 19094,
19095, 19124, 19125, 19129, 19134, 19137, 19156, 19174, 19181.
19095, 19124, 19125, 19129, 19134, 19137, 19156, 19174, 19181, 19189.
* A defect in the malloc implementation, present since glibc 2.15 (2012) or
glibc 2.10 via --enable-experimental-malloc (2009), could result in the

View File

@ -130,8 +130,8 @@ __log1pl (long double xm1)
/* Test for NaN or infinity input. */
u.value = xm1;
hx = u.parts32.w0;
if (hx >= 0x7fff0000)
return xm1;
if ((hx & 0x7fffffff) >= 0x7fff0000)
return xm1 + fabsl (xm1);
/* log1p(+- 0) = +- 0. */
if (((hx & 0x7fffffff) == 0)