Avoid uninitialized warnings in Bessel functions.
authorJoseph Myers <joseph@codesourcery.com>
Thu, 26 Feb 2015 21:49:19 +0000 (21:49 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Thu, 26 Feb 2015 21:49:19 +0000 (21:49 +0000)
math/Makefile currently has:

  # The fdlibm code generates a lot of these warnings but is otherwise clean.
  override CFLAGS += -Wno-uninitialized

This is of course undesirable; warnings should be disabled as narrowly
as possible.  To remove this override, we need to fix files that
generate such warnings, or put warning-disabling pragmas in them.
This patch does so for Bessel function implementations, one of the
cases that have the warnings if the override is removed.  The warnings
arise because functions set pointer variables p and q only for certain
values of the function argument, then use them unconditionally.  As
the static functions in question only get called for arguments that
satisfy the last condition in the if/else chain, the natural fix is to
change the last "else if" to just "else", which this patch does.  (The
ldbl-128 / ldbl-128ibm implementation of these functions is
substantially different and looks like it already does use "else" in
the last case in the nearest corresponding code.)

Tested for x86_64 and x86.

* sysdeps/ieee754/dbl-64/e_j0.c (pzero): Change last case for
setting p and q from "else if" to "else".
(qzero): Likewise.
* sysdeps/ieee754/dbl-64/e_j1.c (pone): Likewise.
(qone): Likewise.
* sysdeps/ieee754/flt-32/e_j0f.c (pzerof): Likewise.
(qzerof): Likewise.
* sysdeps/ieee754/flt-32/e_j1f.c (ponef): Likewise.
(qonef): Likewise.
* sysdeps/ieee754/ldbl-96/e_j0l.c (pzero): Likewise.
(qzero): Likewise.
* sysdeps/ieee754/ldbl-96/e_j1l.c (pone): Likewise.
(qone): Likewise.

ChangeLog
sysdeps/ieee754/dbl-64/e_j0.c
sysdeps/ieee754/dbl-64/e_j1.c
sysdeps/ieee754/flt-32/e_j0f.c
sysdeps/ieee754/flt-32/e_j1f.c
sysdeps/ieee754/ldbl-96/e_j0l.c
sysdeps/ieee754/ldbl-96/e_j1l.c

index 7f94e617cfa16afa4877d78c833ba3c967f1a9fe..de8bfe3836eb98ed66ad052ee87b31e4c213123c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,19 @@
 2015-02-26  Joseph Myers  <joseph@codesourcery.com>
 
+       * sysdeps/ieee754/dbl-64/e_j0.c (pzero): Change last case for
+       setting p and q from "else if" to "else".
+       (qzero): Likewise.
+       * sysdeps/ieee754/dbl-64/e_j1.c (pone): Likewise.
+       (qone): Likewise.
+       * sysdeps/ieee754/flt-32/e_j0f.c (pzerof): Likewise.
+       (qzerof): Likewise.
+       * sysdeps/ieee754/flt-32/e_j1f.c (ponef): Likewise.
+       (qonef): Likewise.
+       * sysdeps/ieee754/ldbl-96/e_j0l.c (pzero): Likewise.
+       (qzero): Likewise.
+       * sysdeps/ieee754/ldbl-96/e_j1l.c (pone): Likewise.
+       (qone): Likewise.
+
        [BZ #18038]
        [BZ #18039]
        * sysdeps/ieee754/ldbl-128/e_acosl.c (__ieee754_acosl): Only
index d165e80925a4b52a19394420947297bdcf67099a..9f25aa855e8683ed43f58db31e9606dfcff8b56b 100644 (file)
@@ -305,6 +305,7 @@ pzero (double x)
   int32_t ix;
   GET_HIGH_WORD (ix, x);
   ix &= 0x7fffffff;
+  /* ix >= 0x40000000 for all calls to this function.  */
   if (ix >= 0x41b00000)
     {
       return one;
@@ -321,7 +322,7 @@ pzero (double x)
     {
       p = pR3; q = pS3;
     }
-  else if (ix >= 0x40000000)
+  else
     {
       p = pR2; q = pS2;
     }
@@ -423,6 +424,7 @@ qzero (double x)
   int32_t ix;
   GET_HIGH_WORD (ix, x);
   ix &= 0x7fffffff;
+  /* ix >= 0x40000000 for all calls to this function.  */
   if (ix >= 0x41b00000)
     {
       return -.125 / x;
@@ -439,7 +441,7 @@ qzero (double x)
     {
       p = qR3; q = qS3;
     }
-  else if (ix >= 0x40000000)
+  else
     {
       p = qR2; q = qS2;
     }
index b7b8a9a64467878a3f846a7b1f874cb049f73f58..d61cff434af37fe7b7e6dcfe2cde223551147cf4 100644 (file)
@@ -305,6 +305,7 @@ pone (double x)
   int32_t ix;
   GET_HIGH_WORD (ix, x);
   ix &= 0x7fffffff;
+  /* ix >= 0x40000000 for all calls to this function.  */
   if (ix >= 0x41b00000)
     {
       return one;
@@ -321,7 +322,7 @@ pone (double x)
     {
       p = pr3; q = ps3;
     }
-  else if (ix >= 0x40000000)
+  else
     {
       p = pr2; q = ps2;
     }
@@ -424,6 +425,7 @@ qone (double x)
   int32_t ix;
   GET_HIGH_WORD (ix, x);
   ix &= 0x7fffffff;
+  /* ix >= 0x40000000 for all calls to this function.  */
   if (ix >= 0x41b00000)
     {
       return .375 / x;
@@ -440,7 +442,7 @@ qone (double x)
     {
       p = qr3; q = qs3;
     }
-  else if (ix >= 0x40000000)
+  else
     {
       p = qr2; q = qs2;
     }
index c4cabd584a4261db2d4be0744695369b06d17971..bd0b80fdb0b338812dae56a40b280400702be484 100644 (file)
@@ -228,10 +228,11 @@ pzerof(float x)
        int32_t ix;
        GET_FLOAT_WORD(ix,x);
        ix &= 0x7fffffff;
+       /* ix >= 0x40000000 for all calls to this function.  */
        if(ix>=0x41000000)     {p = pR8; q= pS8;}
        else if(ix>=0x40f71c58){p = pR5; q= pS5;}
        else if(ix>=0x4036db68){p = pR3; q= pS3;}
-       else if(ix>=0x40000000){p = pR2; q= pS2;}
+       else {p = pR2; q= pS2;}
        z = one/(x*x);
        r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5]))));
        s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*q[4]))));
@@ -324,10 +325,11 @@ qzerof(float x)
        int32_t ix;
        GET_FLOAT_WORD(ix,x);
        ix &= 0x7fffffff;
+       /* ix >= 0x40000000 for all calls to this function.  */
        if(ix>=0x41000000)     {p = qR8; q= qS8;}
        else if(ix>=0x40f71c58){p = qR5; q= qS5;}
        else if(ix>=0x4036db68){p = qR3; q= qS3;}
-       else if(ix>=0x40000000){p = qR2; q= qS2;}
+       else {p = qR2; q= qS2;}
        z = one/(x*x);
        r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5]))));
        s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*(q[4]+z*q[5])))));
index 920e4b8b6d95cab09eb46b9a8950fdfb1ce43427..a67da3275d399537359d6faf90bd37abf048441b 100644 (file)
@@ -230,10 +230,11 @@ ponef(float x)
        int32_t ix;
        GET_FLOAT_WORD(ix,x);
        ix &= 0x7fffffff;
+       /* ix >= 0x40000000 for all calls to this function.  */
        if(ix>=0x41000000)     {p = pr8; q= ps8;}
        else if(ix>=0x40f71c58){p = pr5; q= ps5;}
        else if(ix>=0x4036db68){p = pr3; q= ps3;}
-       else if(ix>=0x40000000){p = pr2; q= ps2;}
+       else {p = pr2; q= ps2;}
        z = one/(x*x);
        r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5]))));
        s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*q[4]))));
@@ -327,10 +328,11 @@ qonef(float x)
        int32_t ix;
        GET_FLOAT_WORD(ix,x);
        ix &= 0x7fffffff;
+       /* ix >= 0x40000000 for all calls to this function.  */
        if(ix>=0x40200000)     {p = qr8; q= qs8;}
        else if(ix>=0x40f71c58){p = qr5; q= qs5;}
        else if(ix>=0x4036db68){p = qr3; q= qs3;}
-       else if(ix>=0x40000000){p = qr2; q= qs2;}
+       else {p = qr2; q= qs2;}
        z = one/(x*x);
        r = p[0]+z*(p[1]+z*(p[2]+z*(p[3]+z*(p[4]+z*p[5]))));
        s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*(q[4]+z*q[5])))));
index 56f48f1ab92d448456423d1a2e872c3716528074..a536054cde26f3b9fbb05d682cdfb060d75d79d4 100644 (file)
@@ -356,6 +356,7 @@ pzero (long double x)
 
   GET_LDOUBLE_WORDS (se, i0, i1, x);
   ix = se & 0x7fff;
+  /* ix >= 0x4000 for all calls to this function.  */
   if (ix >= 0x4002)
     {
       p = pR8;
@@ -374,7 +375,7 @@ pzero (long double x)
          p = pR3;
          q = pS3;
        }
-      else if (ix >= 0x4000)   /* x better be >= 2 */
+      else     /* x >= 2 */
        {
          p = pR2;
          q = pS2;
@@ -493,6 +494,7 @@ qzero (long double x)
 
   GET_LDOUBLE_WORDS (se, i0, i1, x);
   ix = se & 0x7fff;
+  /* ix >= 0x4000 for all calls to this function.  */
   if (ix >= 0x4002)            /* x >= 8 */
     {
       p = qR8;
@@ -511,7 +513,7 @@ qzero (long double x)
          p = qR3;
          q = qS3;
        }
-      else if (ix >= 0x4000)   /* x better be >= 2 */
+      else     /* x >= 2 */
        {
          p = qR2;
          q = qS2;
index 88fcf1399c0e93c43b9fd51743add4b8c657dc52..1adc8f669f729277d7a86dd435190d687c048d7c 100644 (file)
@@ -359,6 +359,7 @@ pone (long double x)
 
   GET_LDOUBLE_WORDS (se, i0, i1, x);
   ix = se & 0x7fff;
+  /* ix >= 0x4000 for all calls to this function.  */
   if (ix >= 0x4002) /* x >= 8 */
     {
       p = pr8;
@@ -377,7 +378,7 @@ pone (long double x)
          p = pr3;
          q = ps3;
        }
-      else if (ix >= 0x4000)   /* x better be >= 2 */
+      else     /* x >= 2 */
        {
          p = pr2;
          q = ps2;
@@ -505,6 +506,7 @@ qone (long double x)
 
   GET_LDOUBLE_WORDS (se, i0, i1, x);
   ix = se & 0x7fff;
+  /* ix >= 0x4000 for all calls to this function.  */
   if (ix >= 0x4002)            /* x >= 8 */
     {
       p = qr8;
@@ -523,7 +525,7 @@ qone (long double x)
          p = qr3;
          q = qs3;
        }
-      else if (ix >= 0x4000)   /* x better be >= 2 */
+      else     /* x >= 2 */
        {
          p = qr2;
          q = qs2;