This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.17-509-gee091ed


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  ee091edf1a16312fff0cc3c6ae0116aded7f1dbf (commit)
       via  a8b792d6bb54fda2ff66f8b0c725397d402f367e (commit)
       via  a1cbf437a53b24f2ff1f6af42028b607f6aa279d (commit)
       via  8b43a0c9f26d5cf067119e47df9973515535673f (commit)
       via  d91da4ce87cd571650f680c0d48d8d3441ec7d2f (commit)
       via  bf0f50dfc6132738422c939a4d1a929ab74933c7 (commit)
      from  5113cea9b77bb621e5dd183adfc74f3528673a8a (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=ee091edf1a16312fff0cc3c6ae0116aded7f1dbf

commit ee091edf1a16312fff0cc3c6ae0116aded7f1dbf
Author: Thomas Schwinge <thomas@codesourcery.com>
Date:   Fri Apr 5 20:28:47 2013 +0200

    More tests for external charater sequences representing NaNs.

diff --git a/ChangeLog b/ChangeLog
index 1bdbdf3..256ce45 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2013-04-05  Thomas Schwinge  <thomas@codesourcery.com>
 
+	* stdio-common/tstdiomisc.c (snanval, msnanval, lsnanval)
+	(lmsnanval): New variables.
+	(F): Add conversion tests.
+	* stdlib/tst-strtod6.c (do_test): Add issignaling tests.
+	* stdlib/Makefile ($(objpfx)tst-strtod6): Depend on $(link-libm).
+
 	* stdio-common/tstdiomisc.c (F): Properly collect individual
 	tests' results.
 
diff --git a/stdio-common/tstdiomisc.c b/stdio-common/tstdiomisc.c
index fa07aa5..5c046bb 100644
--- a/stdio-common/tstdiomisc.c
+++ b/stdio-common/tstdiomisc.c
@@ -47,8 +47,14 @@ t2 (void)
 }
 
 volatile double qnanval;
-volatile double infval;
 volatile long double lqnanval;
+/* A sNaN is only guaranteed to be representable in variables with static (or
+   thread-local) storage duration.  */
+static volatile double snanval = __builtin_nans("");
+static volatile double msnanval = -__builtin_nans("");
+static volatile long double lsnanval = __builtin_nansl("");
+static volatile long double lmsnanval = -__builtin_nansl("");
+volatile double infval;
 volatile long double linfval;
 
 
@@ -74,6 +80,19 @@ F (void)
   printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n",
 	  buf);
 
+  snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G",
+	    snanval, snanval, snanval, snanval,
+	    snanval, snanval, snanval, snanval);
+  result |= strcmp (buf, "nan NAN nan NAN nan NAN nan NAN") != 0;
+  printf ("expected \"nan NAN nan NAN nan NAN nan NAN\", got \"%s\"\n", buf);
+
+  snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G",
+	    msnanval, msnanval, msnanval, msnanval,
+	    msnanval, msnanval, msnanval, msnanval);
+  result |= strcmp (buf, "-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
+  printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n",
+	  buf);
+
   infval = DBL_MAX * DBL_MAX;
 
   snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G",
@@ -102,6 +121,19 @@ F (void)
 	  wbuf);
 
   swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%a %A %e %E %f %F %g %G",
+	    snanval, snanval, snanval, snanval,
+	    snanval, snanval, snanval, snanval);
+  result |= wcscmp (wbuf, L"nan NAN nan NAN nan NAN nan NAN") != 0;
+  printf ("expected L\"nan NAN nan NAN nan NAN nan NAN\", got L\"%S\"\n", wbuf);
+
+  swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%a %A %e %E %f %F %g %G",
+	    msnanval, msnanval, msnanval, msnanval,
+	    msnanval, msnanval, msnanval, msnanval);
+  result |= wcscmp (wbuf, L"-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
+  printf ("expected L\"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got L\"%S\"\n",
+	  wbuf);
+
+  swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%a %A %e %E %f %F %g %G",
 	    infval, infval, infval, infval, infval, infval, infval, infval);
   result |= wcscmp (wbuf, L"inf INF inf INF inf INF inf INF") != 0;
   printf ("expected L\"inf INF inf INF inf INF inf INF\", got L\"%S\"\n", wbuf);
@@ -128,6 +160,19 @@ F (void)
   printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n",
 	  buf);
 
+  snprintf (buf, sizeof buf, "%La %LA %Le %LE %Lf %LF %Lg %LG",
+	    lsnanval, lsnanval, lsnanval, lsnanval,
+	    lsnanval, lsnanval, lsnanval, lsnanval);
+  result |= strcmp (buf, "nan NAN nan NAN nan NAN nan NAN") != 0;
+  printf ("expected \"nan NAN nan NAN nan NAN nan NAN\", got \"%s\"\n", buf);
+
+  snprintf (buf, sizeof buf, "%La %LA %Le %LE %Lf %LF %Lg %LG",
+	    lmsnanval, lmsnanval, lmsnanval, lmsnanval,
+	    lmsnanval, lmsnanval, lmsnanval, lmsnanval);
+  result |= strcmp (buf, "-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
+  printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n",
+	  buf);
+
   linfval = LDBL_MAX * LDBL_MAX;
 
   snprintf (buf, sizeof buf, "%La %LA %Le %LE %Lf %LF %Lg %LG",
@@ -160,6 +205,21 @@ F (void)
 
   swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]),
 	    L"%La %LA %Le %LE %Lf %LF %Lg %LG",
+	    lsnanval, lsnanval, lsnanval, lsnanval,
+	    lsnanval, lsnanval, lsnanval, lsnanval);
+  result |= wcscmp (wbuf, L"nan NAN nan NAN nan NAN nan NAN") != 0;
+  printf ("expected L\"nan NAN nan NAN nan NAN nan NAN\", got L\"%S\"\n", wbuf);
+
+  swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]),
+	    L"%La %LA %Le %LE %Lf %LF %Lg %LG",
+	    lmsnanval, lmsnanval, lmsnanval, lmsnanval,
+	    lmsnanval, lmsnanval, lmsnanval, lmsnanval);
+  result |= wcscmp (wbuf, L"-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
+  printf ("expected L\"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got L\"%S\"\n",
+	  wbuf);
+
+  swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]),
+	    L"%La %LA %Le %LE %Lf %LF %Lg %LG",
 	    linfval, linfval, linfval, linfval,
 	    linfval, linfval, linfval, linfval);
   result |= wcscmp (wbuf, L"inf INF inf INF inf INF inf INF") != 0;
diff --git a/stdlib/Makefile b/stdlib/Makefile
index 6f98c71..27765d1 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -157,6 +157,7 @@ $(objpfx)bug-getcontext: $(link-libm)
 $(objpfx)tst-strtod-round: $(link-libm)
 $(objpfx)tst-tininess: $(link-libm)
 $(objpfx)tst-strtod-underflow: $(link-libm)
+$(objpfx)tst-strtod6: $(link-libm)
 
 tst-tls-atexit-lib.so-no-z-defs = yes
 
diff --git a/stdlib/tst-strtod6.c b/stdlib/tst-strtod6.c
index fdb104f..1d87266 100644
--- a/stdlib/tst-strtod6.c
+++ b/stdlib/tst-strtod6.c
@@ -16,6 +16,11 @@ do_test (void)
       puts ("strtod did not return NAN");
       result = 1;
     }
+  if (issignaling (d))
+    {
+      puts ("strtod returned a sNAN");
+      result = 1;
+    }
   if (strcmp (endp, "something") != 0)
     {
       puts  ("strtod set incorrect end pointer");
@@ -28,6 +33,11 @@ do_test (void)
       puts ("strtof did not return NAN");
       result = 1;
     }
+  if (issignaling (f))
+    {
+      puts ("strtof returned a sNAN");
+      result = 1;
+    }
   if (strcmp (endp, "something") != 0)
     {
       puts  ("strtof set incorrect end pointer");
@@ -40,6 +50,11 @@ do_test (void)
       puts ("strtold did not return NAN");
       result = 1;
     }
+  if (issignaling (ld))
+    {
+      puts ("strtold returned a sNAN");
+      result = 1;
+    }
   if (strcmp (endp, "something") != 0)
     {
       puts  ("strtold set incorrect end pointer");

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=a8b792d6bb54fda2ff66f8b0c725397d402f367e

commit a8b792d6bb54fda2ff66f8b0c725397d402f367e
Author: Thomas Schwinge <thomas@codesourcery.com>
Date:   Fri Apr 5 15:58:27 2013 +0200

    Properly collect individual tests' results.
    
    Fixup for commit 003c9895a89e71767ad64bafac1ca99622be2eb7.

diff --git a/ChangeLog b/ChangeLog
index a4a3779..1bdbdf3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2013-04-05  Thomas Schwinge  <thomas@codesourcery.com>
 
+	* stdio-common/tstdiomisc.c (F): Properly collect individual
+	tests' results.
+
 	[BZ #14686, #15336]
 	* sysdeps/ieee754/dbl-64/urem.h (nNAN, NAN): Remove definitions.
 	* sysdeps/ieee754/dbl-64/e_remainder.c (__ieee754_remainder):
diff --git a/stdio-common/tstdiomisc.c b/stdio-common/tstdiomisc.c
index d24c55f..fa07aa5 100644
--- a/stdio-common/tstdiomisc.c
+++ b/stdio-common/tstdiomisc.c
@@ -57,20 +57,20 @@ F (void)
 {
   char buf[80];
   wchar_t wbuf[40];
-  int result;
+  int result = 0;
 
   qnanval = NAN;
 
   snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G",
 	    qnanval, qnanval, qnanval, qnanval,
 	    qnanval, qnanval, qnanval, qnanval);
-  result = strcmp (buf, "nan NAN nan NAN nan NAN nan NAN") != 0;
+  result |= strcmp (buf, "nan NAN nan NAN nan NAN nan NAN") != 0;
   printf ("expected \"nan NAN nan NAN nan NAN nan NAN\", got \"%s\"\n", buf);
 
   snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G",
 	    -qnanval, -qnanval, -qnanval, -qnanval,
 	    -qnanval, -qnanval, -qnanval, -qnanval);
-  result = strcmp (buf, "-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
+  result |= strcmp (buf, "-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
   printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n",
 	  buf);
 
@@ -118,13 +118,13 @@ F (void)
   snprintf (buf, sizeof buf, "%La %LA %Le %LE %Lf %LF %Lg %LG",
 	    lqnanval, lqnanval, lqnanval, lqnanval,
 	    lqnanval, lqnanval, lqnanval, lqnanval);
-  result = strcmp (buf, "nan NAN nan NAN nan NAN nan NAN") != 0;
+  result |= strcmp (buf, "nan NAN nan NAN nan NAN nan NAN") != 0;
   printf ("expected \"nan NAN nan NAN nan NAN nan NAN\", got \"%s\"\n", buf);
 
   snprintf (buf, sizeof buf, "%La %LA %Le %LE %Lf %LF %Lg %LG",
 	    -lqnanval, -lqnanval, -lqnanval, -lqnanval,
 	    -lqnanval, -lqnanval, -lqnanval, -lqnanval);
-  result = strcmp (buf, "-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
+  result |= strcmp (buf, "-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
   printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n",
 	  buf);
 

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=a1cbf437a53b24f2ff1f6af42028b607f6aa279d

commit a1cbf437a53b24f2ff1f6af42028b607f6aa279d
Author: Thomas Schwinge <thomas@codesourcery.com>
Date:   Thu Apr 4 17:35:12 2013 +0200

    [BZ #14686, #15336] Fix standard compliance.  Don't use hard-coded qNaN values.

diff --git a/ChangeLog b/ChangeLog
index f0abe72..a4a3779 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2013-04-05  Thomas Schwinge  <thomas@codesourcery.com>
 
+	[BZ #14686, #15336]
+	* sysdeps/ieee754/dbl-64/urem.h (nNAN, NAN): Remove definitions.
+	* sysdeps/ieee754/dbl-64/e_remainder.c (__ieee754_remainder):
+	Instead, use input NaN values or generate a qNaN by arithmetic
+	operation.  Also fix bugs to comply with the standard.
+	* math/libm-test.inc (remainder_test): Add more tests.
+
 	[BZ #15335, #15342]
 	* sysdeps/ieee754/dbl-64/upow.h (NaNQ): Remove definitions.
 	* sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Instead, use
diff --git a/NEWS b/NEWS
index 3a39baf..b85b67d 100644
--- a/NEWS
+++ b/NEWS
@@ -10,10 +10,10 @@ Version 2.18
 * The following bugs are resolved with this release:
 
   10357, 11120, 11561, 12723, 13550, 13889, 13951, 14142, 14176, 14200,
-  14317, 14327, 14478, 14496, 14812, 14920, 14964, 14981, 14982, 14985,
-  14994, 14996, 15003, 15006, 15020, 15023, 15036, 15054, 15055, 15062,
-  15078, 15160, 15214, 15232, 15234, 15283, 15285, 15287, 15304, 15305,
-  15307, 15327, 15330, 15335, 15337, 15342.
+  14317, 14327, 14478, 14496, 14686, 14812, 14920, 14964, 14981, 14982,
+  14985, 14994, 14996, 15003, 15006, 15020, 15023, 15036, 15054, 15055,
+  15062, 15078, 15160, 15214, 15232, 15234, 15283, 15285, 15287, 15304,
+  15305, 15307, 15327, 15330, 15335, 15336, 15337, 15342.
 
 * CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
   #15078).
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 08c80fa..92fa6a2 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -11103,12 +11103,30 @@ remainder_test (void)
   TEST_ff_f (remainder, 1, minus_zero, qnan_value, INVALID_EXCEPTION);
   check_int ("errno for remainder(1, -0) = EDOM ", errno, EDOM, 0, 0, 0);
   errno = 0;
+  TEST_ff_f (remainder, plus_infty, minus_zero, qnan_value, INVALID_EXCEPTION);
+  check_int ("errno for remainder(INF, -0) = EDOM ", errno, EDOM, 0, 0, 0);
+  errno = 0;
+  TEST_ff_f (remainder, plus_infty, 0, qnan_value, INVALID_EXCEPTION);
+  check_int ("errno for remainder(INF, 0) = EDOM ", errno, EDOM, 0, 0, 0);
+  errno = 0;
   TEST_ff_f (remainder, plus_infty, 1, qnan_value, INVALID_EXCEPTION);
   check_int ("errno for remainder(INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
   errno = 0;
+  TEST_ff_f (remainder, plus_infty, 2, qnan_value, INVALID_EXCEPTION);
+  check_int ("errno for remainder(INF, 2) = EDOM ", errno, EDOM, 0, 0, 0);
+  errno = 0;
+  TEST_ff_f (remainder, minus_infty, minus_zero, qnan_value, INVALID_EXCEPTION);
+  check_int ("errno for remainder(-INF, -0) = EDOM ", errno, EDOM, 0, 0, 0);
+  errno = 0;
+  TEST_ff_f (remainder, minus_infty, 0, qnan_value, INVALID_EXCEPTION);
+  check_int ("errno for remainder(-INF, 0) = EDOM ", errno, EDOM, 0, 0, 0);
+  errno = 0;
   TEST_ff_f (remainder, minus_infty, 1, qnan_value, INVALID_EXCEPTION);
   check_int ("errno for remainder(-INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
   errno = 0;
+  TEST_ff_f (remainder, minus_infty, 2, qnan_value, INVALID_EXCEPTION);
+  check_int ("errno for remainder(-INF, 2) = EDOM ", errno, EDOM, 0, 0, 0);
+  errno = 0;
   TEST_ff_f (remainder, qnan_value, qnan_value, qnan_value);
   check_int ("errno for remainder(qNAN, qNAN) unchanged", errno, 0, 0, 0, 0);
   errno = 0;
@@ -11118,6 +11136,13 @@ remainder_test (void)
   TEST_ff_f (remainder, qnan_value, 0, qnan_value);
   check_int ("errno for remainder(qNaN, 0) unchanged", errno, 0, 0, 0, 0);
 
+  errno = 0;
+  TEST_ff_f (remainder, 7.0, plus_infty, 7.0);
+  check_int ("errno for remainder(7.0, INF) unchanged", errno, 0, 0, 0, 0);
+  errno = 0;
+  TEST_ff_f (remainder, 7.0, minus_infty, 7.0);
+  check_int ("errno for remainder(7.0, -INF) unchanged", errno, 0, 0, 0, 0);
+
   TEST_ff_f (remainder, 1.625, 1.0, -0.375);
   TEST_ff_f (remainder, -1.625, 1.0, 0.375);
   TEST_ff_f (remainder, 1.625, -1.0, -0.375);
diff --git a/sysdeps/ieee754/dbl-64/e_remainder.c b/sysdeps/ieee754/dbl-64/e_remainder.c
index c4db931..39ca0c2 100644
--- a/sysdeps/ieee754/dbl-64/e_remainder.c
+++ b/sysdeps/ieee754/dbl-64/e_remainder.c
@@ -111,12 +111,14 @@ double __ieee754_remainder(double x, double y)
       else return (z>0)?z-y:z+y;
     }
     else { /* if x is too big */
-      if (kx == 0x7ff00000 && u.i[LOW_HALF] == 0 && y == 1.0)
-	return x / x;
-      if (kx>=0x7ff00000||(ky==0&&t.i[LOW_HALF]==0)||ky>0x7ff00000||
-	  (ky==0x7ff00000&&t.i[LOW_HALF]!=0))
-	return (u.i[HIGH_HALF]&0x80000000)?nNAN.x:NAN.x;
-      else return x;
+      if (ky==0 && t.i[LOW_HALF] == 0)		/* y = 0 */
+	return (x * y) / (x * y);
+      else if (kx >= 0x7ff00000			/* x not finite */
+	       || (ky>0x7ff00000		/* y is NaN */
+		   || (ky == 0x7ff00000 && t.i[LOW_HALF] != 0)))
+	return (x * y) / (x * y);
+      else
+	return x;
     }
    }
   }
diff --git a/sysdeps/ieee754/dbl-64/urem.h b/sysdeps/ieee754/dbl-64/urem.h
index c4daa5d..b576691 100644
--- a/sysdeps/ieee754/dbl-64/urem.h
+++ b/sysdeps/ieee754/dbl-64/urem.h
@@ -32,18 +32,14 @@ static const mynumber big = {{0x43380000, 0}},  /* 6755399441055744 */
                      t128 = {{0x47f00000, 0}},  /*  2^ 128          */
                     tm128 = {{0x37f00000, 0}},  /*  2^-128          */
                       ZERO = {{0, 0}},          /*  0.0             */
-                     nZERO = {{0x80000000, 0}}, /* -0.0             */
-                       NAN = {{0x7ff80000, 0}}, /*  NaN             */
-                      nNAN = {{0xfff80000, 0}}; /* -NaN             */
+                     nZERO = {{0x80000000, 0}}; /* -0.0             */
 #else
 #ifdef LITTLE_ENDI
 static const mynumber big = {{0, 0x43380000}},  /* 6755399441055744 */
                      t128 = {{0, 0x47f00000}},  /*  2^ 128          */
                     tm128 = {{0, 0x37f00000}},  /*  2^-128          */
                       ZERO = {{0, 0}},          /*  0.0             */
-                     nZERO = {{0, 0x80000000}}, /* -0.0             */
-                       NAN = {{0, 0x7ff80000}}, /*  NaN             */
-                      nNAN = {{0, 0xfff80000}}; /* -NaN             */
+                     nZERO = {{0, 0x80000000}}; /* -0.0             */
 #endif
 #endif
 

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=8b43a0c9f26d5cf067119e47df9973515535673f

commit 8b43a0c9f26d5cf067119e47df9973515535673f
Author: Thomas Schwinge <thomas@codesourcery.com>
Date:   Wed Apr 3 22:00:21 2013 +0200

    [BZ #15335, #15342] Fix standard compliance.  Don't use hard-coded qNaN values.

diff --git a/ChangeLog b/ChangeLog
index b96a333..f0abe72 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2013-04-05  Thomas Schwinge  <thomas@codesourcery.com>
 
+	[BZ #15335, #15342]
+	* sysdeps/ieee754/dbl-64/upow.h (NaNQ): Remove definitions.
+	* sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Instead, use
+	input NaN values or generate a qNaN by arithmetic operation.
+
 	* sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Remove
 	unreachable code.
 
diff --git a/NEWS b/NEWS
index 8577030..3a39baf 100644
--- a/NEWS
+++ b/NEWS
@@ -13,7 +13,7 @@ Version 2.18
   14317, 14327, 14478, 14496, 14812, 14920, 14964, 14981, 14982, 14985,
   14994, 14996, 15003, 15006, 15020, 15023, 15036, 15054, 15055, 15062,
   15078, 15160, 15214, 15232, 15234, 15283, 15285, 15287, 15304, 15305,
-  15307, 15327, 15330, 15337.
+  15307, 15327, 15330, 15335, 15337, 15342.
 
 * CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
   #15078).
diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c
index 44d6f62..9a766e7 100644
--- a/sysdeps/ieee754/dbl-64/e_pow.c
+++ b/sysdeps/ieee754/dbl-64/e_pow.c
@@ -71,8 +71,9 @@ __ieee754_pow(double x, double y) {
   u.x=x;
   if (v.i[LOW_HALF] == 0) { /* of y */
     qx = u.i[HIGH_HALF]&0x7fffffff;
-    /* Checking  if x is not too small to compute */
-    if (((qx==0x7ff00000)&&(u.i[LOW_HALF]!=0))||(qx>0x7ff00000)) return NaNQ.x;
+    /* Is x a NaN?  */
+    if (((qx == 0x7ff00000) && (u.i[LOW_HALF] != 0)) || (qx > 0x7ff00000))
+      return x;
     if (y == 1.0) return x;
     if (y == 2.0) return x*x;
     if (y == -1.0) return 1.0/x;
@@ -111,7 +112,7 @@ __ieee754_pow(double x, double y) {
 
   if (x == 0) {
     if (((v.i[HIGH_HALF] & 0x7fffffff) == 0x7ff00000 && v.i[LOW_HALF] != 0)
-	|| (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000)
+	|| (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000) /* NaN */
       return y;
     if (ABS(y) > 1.0e20) return (y>0)?0:1.0/0.0;
     k = checkint(y);
@@ -124,9 +125,10 @@ __ieee754_pow(double x, double y) {
   qx = u.i[HIGH_HALF]&0x7fffffff;  /*   no sign   */
   qy = v.i[HIGH_HALF]&0x7fffffff;  /*   no sign   */
 
-  if (qx >= 0x7ff00000 && (qx > 0x7ff00000 || u.i[LOW_HALF] != 0)) return NaNQ.x;
-  if (qy >= 0x7ff00000 && (qy > 0x7ff00000 || v.i[LOW_HALF] != 0))
-    return x == 1.0 ? 1.0 : NaNQ.x;
+  if (qx >= 0x7ff00000 && (qx > 0x7ff00000 || u.i[LOW_HALF] != 0)) /* NaN */
+    return x;
+  if (qy >= 0x7ff00000 && (qy > 0x7ff00000 || v.i[LOW_HALF] != 0)) /* NaN */
+    return x == 1.0 ? 1.0 : y;
 
   /* if x<0 */
   if (u.i[HIGH_HALF] < 0) {
@@ -139,7 +141,7 @@ __ieee754_pow(double x, double y) {
       }
       else if (qx == 0x7ff00000)
 	return y < 0 ? 0.0 : INF.x;
-      return NaNQ.x;                              /* y not integer and x<0 */
+      return (x - x) / (x - x);                   /* y not integer and x<0 */
     }
     else if (qx == 0x7ff00000)
       {
diff --git a/sysdeps/ieee754/dbl-64/upow.h b/sysdeps/ieee754/dbl-64/upow.h
index 67bae1a..130fb32 100644
--- a/sysdeps/ieee754/dbl-64/upow.h
+++ b/sysdeps/ieee754/dbl-64/upow.h
@@ -34,7 +34,6 @@
 /**/ nZERO	    = {{0x80000000, 0}},	  /* -0.0          */
 /**/ INF            = {{0x7ff00000, 0x00000000}}, /* INF           */
 /**/ nINF           = {{0xfff00000, 0x00000000}}, /* -INF          */
-/**/ NaNQ           = {{0x7ff80000, 0x00000000}}, /* NaNQ          */
 /**/ sqrt_2         = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2)       */
 /**/ ln2a           = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
 /**/ ln2b           = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a    */
@@ -49,7 +48,6 @@
 /**/ nZERO	    = {{0, 0x80000000}},	  /* -0.0          */
 /**/ INF            = {{0x00000000, 0x7ff00000}}, /* INF           */
 /**/ nINF           = {{0x00000000, 0xfff00000}}, /* -INF           */
-/**/ NaNQ           = {{0x00000000, 0x7ff80000}}, /* NaNQ          */
 /**/ sqrt_2         = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2)       */
 /**/ ln2a           = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
 /**/ ln2b           = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a    */

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=d91da4ce87cd571650f680c0d48d8d3441ec7d2f

commit d91da4ce87cd571650f680c0d48d8d3441ec7d2f
Author: Thomas Schwinge <thomas@codesourcery.com>
Date:   Wed Apr 3 21:10:02 2013 +0200

    Remove unreachable code.
    
    The case of y == 0 is handled at the beginning of the function.

diff --git a/ChangeLog b/ChangeLog
index ffcb953..b96a333 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2013-04-05  Thomas Schwinge  <thomas@codesourcery.com>
 
+	* sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Remove
+	unreachable code.
+
 	* sysdeps/ieee754/dbl-64/usncs.h (NAN): Removed unused
 	definitions.
 
diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c
index f8962a7..44d6f62 100644
--- a/sysdeps/ieee754/dbl-64/e_pow.c
+++ b/sysdeps/ieee754/dbl-64/e_pow.c
@@ -153,8 +153,7 @@ __ieee754_pow(double x, double y) {
   /* x>0 */
 
   if (qx == 0x7ff00000)                              /* x= 2^-0x3ff */
-    {if (y == 0) return NaNQ.x;
-    return (y>0)?x:0; }
+    return y > 0 ? x : 0;
 
   if (qy > 0x45f00000 && qy < 0x7ff00000) {
     if (x == 1.0) return 1.0;

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=bf0f50dfc6132738422c939a4d1a929ab74933c7

commit bf0f50dfc6132738422c939a4d1a929ab74933c7
Author: Thomas Schwinge <thomas@codesourcery.com>
Date:   Wed Apr 3 22:17:47 2013 +0200

    Remove unused hard-coded qNaN definition.

diff --git a/ChangeLog b/ChangeLog
index 8d2602b..ffcb953 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-04-05  Thomas Schwinge  <thomas@codesourcery.com>
+
+	* sysdeps/ieee754/dbl-64/usncs.h (NAN): Removed unused
+	definitions.
+
 2013-04-03  Joseph Myers  <joseph@codesourcery.com>
 
 	[BZ #14478]
diff --git a/sysdeps/ieee754/dbl-64/usncs.h b/sysdeps/ieee754/dbl-64/usncs.h
index 92a6321..11c189c 100644
--- a/sysdeps/ieee754/dbl-64/usncs.h
+++ b/sysdeps/ieee754/dbl-64/usncs.h
@@ -30,7 +30,6 @@
 #ifdef BIG_ENDI
 static const mynumber
 
-/**/          NAN = {{0x7ff80000, 0x00000000 }}, /*  NaN                     */
 /**/           s1 = {{0xBFC55555, 0x55555555 }}, /* -0.16666666666666666     */
 /**/           s2 = {{0x3F811111, 0x11110ECE }}, /*  0.0083333333333323288   */
 /**/           s3 = {{0xBF2A01A0, 0x19DB08B8 }}, /* -0.00019841269834414642  */
@@ -53,7 +52,6 @@ static const mynumber
 #ifdef LITTLE_ENDI
 static const mynumber
 
-/**/          NAN = {{0x00000000, 0x7ff80000 }},/*  NaN                     */
 /**/           s1 = {{0x55555555, 0xBFC55555 }},/* -0.16666666666666666     */
 /**/           s2 = {{0x11110ECE, 0x3F811111 }},/*  0.0083333333333323288   */
 /**/           s3 = {{0x19DB08B8, 0xBF2A01A0 }},/* -0.00019841269834414642  */

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                            |   29 ++++++++++++++
 NEWS                                 |    8 ++--
 math/libm-test.inc                   |   25 ++++++++++++
 stdio-common/tstdiomisc.c            |   72 +++++++++++++++++++++++++++++++---
 stdlib/Makefile                      |    1 +
 stdlib/tst-strtod6.c                 |   15 +++++++
 sysdeps/ieee754/dbl-64/e_pow.c       |   19 +++++----
 sysdeps/ieee754/dbl-64/e_remainder.c |   14 ++++---
 sysdeps/ieee754/dbl-64/upow.h        |    2 -
 sysdeps/ieee754/dbl-64/urem.h        |    8 +---
 sysdeps/ieee754/dbl-64/usncs.h       |    2 -
 11 files changed, 160 insertions(+), 35 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]