about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c14
2 files changed, 10 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 1de3a2379e..93d556311e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-08-20  Joseph Myers  <joseph@codesourcery.com>
+
+	* sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: Always initialize
+	variables for high and low parts before possibly modifying them.
+
 2015-08-20  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* sysdeps/i386/i686/multiarch/init-arch.h: Removed.
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c b/sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c
index ef1b3dca1e..5f92a5fee8 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c
@@ -65,7 +65,7 @@ __nearbyintl (long double x)
     }
   else if (fabs (u.d[1].d) < TWO52 && u.d[1].d != 0.0)
     {
-      double high, low, tau;
+      double high = u.d[0].d, low = u.d[1].d, tau;
       /* In this case we have to round the low double and handle any
          adjustment to the high double that may be caused by rounding
          (up).  This is complicated by the fact that the high double
@@ -78,8 +78,6 @@ __nearbyintl (long double x)
 	    {
 	      /* If the high/low doubles are the same sign then simply
 	         round the low double.  */
-	      high = u.d[0].d;
-	      low = u.d[1].d;
 	    }
 	  else if (u.d[1].d < 0.0)
 	    {
@@ -88,8 +86,8 @@ __nearbyintl (long double x)
 
 	      tau = __nextafter (u.d[0].d, 0.0);
 	      tau = (u.d[0].d - tau) * 2.0;
-	      high = u.d[0].d - tau;
-	      low = u.d[1].d + tau;
+	      high -= tau;
+	      low += tau;
 	    }
 	  low += TWO52;
 	  low -= TWO52;
@@ -100,8 +98,6 @@ __nearbyintl (long double x)
 	    {
 	      /* If the high/low doubles are the same sign then simply
 	         round the low double.  */
-	      high = u.d[0].d;
-	      low = u.d[1].d;
 	    }
 	  else if (u.d[1].d > 0.0)
 	    {
@@ -109,8 +105,8 @@ __nearbyintl (long double x)
 	         adjust for that.  */
 	      tau = __nextafter (u.d[0].d, 0.0);
 	      tau = (u.d[0].d - tau) * 2.0;
-	      high = u.d[0].d - tau;
-	      low = u.d[1].d + tau;
+	      high -= tau;
+	      low += tau;
 	    }
 	  low = TWO52 - low;
 	  low = -(low - TWO52);