Avoid M_NAN + M_NAN in complex functions.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 11 Oct 2016 00:50:43 +0000 (00:50 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 11 Oct 2016 00:50:43 +0000 (00:50 +0000)
Some libm complex functions have code that computes M_NAN + M_NAN.
This is nonsensical; it's just equivalent to M_NAN, since it's a quiet
NaN (and the comments suggesting this raises an exception are
similarly wrong).  This patch changes the code just to use M_NAN (and
removes the bogus comments).  (Preferably, code should either
propagate an input NaN or do a computation that raises "invalid" and
generates a default NaN at the same time.  There are various cases,
however, that currently raise "invalid" even for NaN inputs; I think
those are cases where "invalid" is optional in ISO C so a change to
whether it's raised would be OK, but they would still need more
careful consideration than the cases where such issues do not arise.)

Tested for x86_64 and x86 (testsuite, and that installed stripped
shared libraries are unchanged by the patch).

* math/s_ccosh_template.c (M_DECL_FUNC (__ccosh)): Use M_NAN
instead of M_NAN + M_NAN.
* math/s_csinh_template.c (M_DECL_FUNC (__csinh)): Likewise.

ChangeLog
math/s_ccosh_template.c
math/s_csinh_template.c

index 2590895..ee5f315 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2016-10-11  Joseph Myers  <joseph@codesourcery.com>
+
+       * math/s_ccosh_template.c (M_DECL_FUNC (__ccosh)): Use M_NAN
+       instead of M_NAN + M_NAN.
+       * math/s_csinh_template.c (M_DECL_FUNC (__csinh)): Likewise.
+
 2016-10-10  Samuel Thibault  <samuel.thibault@ens-lyon.org>
 
        * misc/getauxval.c [!HAVE_AUX_VECTOR] (__getauxval): Do not define
index 68de41d..7fea5c9 100644 (file)
@@ -88,7 +88,7 @@ M_DECL_FUNC (__ccosh) (CFLOAT x)
       else
        {
          __imag__ retval = __real__ x == 0 ? 0 : M_NAN;
-         __real__ retval = M_NAN + M_NAN;
+         __real__ retval = M_NAN;
 
          if (icls == FP_INFINITE)
            feraiseexcept (FE_INVALID);
@@ -124,9 +124,8 @@ M_DECL_FUNC (__ccosh) (CFLOAT x)
        }
       else
        {
-         /* The addition raises the invalid exception.  */
          __real__ retval = M_HUGE_VAL;
-         __imag__ retval = M_NAN + M_NAN;
+         __imag__ retval = M_NAN;
 
          if (icls == FP_INFINITE)
            feraiseexcept (FE_INVALID);
index 22c0c31..45fbb36 100644 (file)
@@ -97,7 +97,7 @@ M_DECL_FUNC (__csinh) (CFLOAT x)
            {
              /* Real part is 0.0.  */
              __real__ retval = M_COPYSIGN (0, negate ? -1 : 1);
-             __imag__ retval = M_NAN + M_NAN;
+             __imag__ retval = M_NAN;
 
              if (icls == FP_INFINITE)
                feraiseexcept (FE_INVALID);
@@ -143,9 +143,8 @@ M_DECL_FUNC (__csinh) (CFLOAT x)
        }
       else
        {
-         /* The addition raises the invalid exception.  */
          __real__ retval = M_HUGE_VAL;
-         __imag__ retval = M_NAN + M_NAN;
+         __imag__ retval = M_NAN;
 
          if (icls == FP_INFINITE)
            feraiseexcept (FE_INVALID);