about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-11-26 13:54:55 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-11-26 13:54:55 +0000
commit706688aaefdeb48e63519525f11108ce14844a26 (patch)
tree97d3ef3595e73782e53222abcac60e5264ace340
parent12da14a59135fe331f294b91488c1bdf55b35b4e (diff)
downloadglibc-706688aaefdeb48e63519525f11108ce14844a26.tar.gz
glibc-706688aaefdeb48e63519525f11108ce14844a26.tar.xz
glibc-706688aaefdeb48e63519525f11108ce14844a26.zip
FIx ldbl-128ibm frexpl for 32-bit systems (bug 16619, bug 16740).
This patch fixes bugs in ldbl-128ibm frexpl for 32-bit systems shown
up by warnings:

../sysdeps/ieee754/ldbl-128ibm/s_frexpl.c:82:4: warning: left shift count >= width of type
../sysdeps/ieee754/ldbl-128ibm/s_frexpl.c:129:5: warning: left shift count >= width of type

This did in fact show up in test-ldouble.out (alongside all the other
problems there ... maybe we should again consider running the libm
tests at finer granularity from the makefiles) as already covered by
the testsuite after the previous patch that fixed these bugs for
64-bit systems.  The fix is simply using 1LL instead of 1L when
shifting by 52.

Tested for powerpc32 (soft float).

	[BZ #16619]
	[BZ #16740]
	* sysdeps/ieee754/ldbl-128ibm/s_frexpl.c (__frexpl): Use 1LL << 52
	instead of 1L << 52.
-rw-r--r--ChangeLog5
-rw-r--r--NEWS8
-rw-r--r--sysdeps/ieee754/ldbl-128ibm/s_frexpl.c4
3 files changed, 11 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 5581f0818d..90a948b482 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2014-11-26  Joseph Myers  <joseph@codesourcery.com>
 
+	[BZ #16619]
+	[BZ #16740]
+	* sysdeps/ieee754/ldbl-128ibm/s_frexpl.c (__frexpl): Use 1LL << 52
+	instead of 1L << 52.
+
 	* libio/bug-rewind.c (do_test): Check fwscanf return values.
 	* libio/bug-rewind2.c (do_test): Likewise.
 
diff --git a/NEWS b/NEWS
index 03f7a98f55..8f8203b310 100644
--- a/NEWS
+++ b/NEWS
@@ -9,10 +9,10 @@ Version 2.21
 
 * The following bugs are resolved with this release:
 
-  6652, 12926, 14132, 14138, 14171, 14498, 15215, 15884, 16469, 17266,
-  17344, 17363, 17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506,
-  17508, 17522, 17555, 17570, 17571, 17572, 17573, 17574, 17582, 17583,
-  17584, 17585, 17589, 17594, 17608, 17616, 17625, 17633.
+  6652, 12926, 14132, 14138, 14171, 14498, 15215, 15884, 16469, 16619,
+  16740, 17266, 17344, 17363, 17370, 17371, 17411, 17460, 17475, 17485,
+  17501, 17506, 17508, 17522, 17555, 17570, 17571, 17572, 17573, 17574,
+  17582, 17583, 17584, 17585, 17589, 17594, 17608, 17616, 17625, 17633.
 
 * CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag
   under certain input conditions resulting in the execution of a shell for
diff --git a/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c b/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c
index 483c6a8c5d..52d2d3ea90 100644
--- a/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c
+++ b/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c
@@ -79,7 +79,7 @@ long double __frexpl(long double x, int *eptr)
       if (ix == 0
 	  && (int64_t) (hx ^ lx) < 0)
 	{
-	  hx += 1L << 52;
+	  hx += 1LL << 52;
 	  expon -= 1;
 	}
 
@@ -126,7 +126,7 @@ long double __frexpl(long double x, int *eptr)
 		     be wrong since the returned low double will be
 		     zero.  This can happen if the input was
 		     something weird like 0x1p1000 - 0x1p-1000.  */
-		  hx -= 1L << 52;
+		  hx -= 1LL << 52;
 		  expon += 1;
 		}
 	    }