]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix ldbl-128ibm log1pl (-qNaN) spurious "invalid" exception (bug 22693).
authorJoseph Myers <joseph@codesourcery.com>
Wed, 10 Jan 2018 17:59:01 +0000 (17:59 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 10 Jan 2018 17:59:01 +0000 (17:59 +0000)
The ldbl-128ibm implementation of log1pl does ordered comparisons on a
negative qNaN argument, so resulting in spurious "invalid" exceptions
(for soft-float powerpc; hard-float only avoids this because of GCC
bug 58684 meaning ordered comparison instructions never get
generated).  This patch fixes this by arranging for the test for NaN
or infinity arguments to handle negative arguments as well.

Tested for powerpc (soft float).

[BZ #22693]
* sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (__log1pl): Handle
negative arguments in test for NaN or infinity argument.

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

index ceb8333dd1f54dde5a257f7e5d2a17c643da3f9a..3025edf83a9073b6deba47591d2b81e5beafe4da 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2018-01-10  Joseph Myers  <joseph@codesourcery.com>
+
+       [BZ #22693]
+       * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (__log1pl): Handle
+       negative arguments in test for NaN or infinity argument.
+
 2018-01-10  Dmitry V. Levin  <ldv@altlinux.org>
 
        * po/libc.pot: Regenerate.
index 5457892a984f0345f403f499d474250d8c368d91..e499c9f60425a703cfdc8133297049411f4d3993 100644 (file)
@@ -131,8 +131,8 @@ __log1pl (long double xm1)
   /* Test for NaN or infinity input. */
   xhi = ldbl_high (xm1);
   EXTRACT_WORDS (hx, lx, xhi);
-  if (hx >= 0x7ff00000)
-    return xm1 + xm1;
+  if ((hx & 0x7fffffff) >= 0x7ff00000)
+    return xm1 + xm1 * xm1;
 
   /* log1p(+- 0) = +- 0.  */
   if (((hx & 0x7fffffff) | lx) == 0)