]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix ldbl-128 log1pl (-qNaN) spurious "invalid" exception (bug 19189).
authorJoseph Myers <joseph@codesourcery.com>
Thu, 29 Oct 2015 23:09:51 +0000 (23:09 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Thu, 29 Oct 2015 23:09:51 +0000 (23:09 +0000)
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.

ChangeLog
NEWS
sysdeps/ieee754/ldbl-128/s_log1pl.c

index 42c1701131efa33ce41c88697b9d1450b1a58e89..3d3440fe64b6065478ba9eab03c977f7b49d015c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/NEWS b/NEWS
index ae89162d81a23cbdc0136dbe1318a98f4004729c..654217c49f1c59401bcbf65f480a9bcc654c608e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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
index 9806ab6d63daaa7158c6bb0127e59fc51131540e..b348f41e556b8641906a2d8fcb14f0152bcf44e0 100644 (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)