From b65f0b7b2ecd144800830633a4c2719f11775572 Mon Sep 17 00:00:00 2001 From: Stefan Liebler Date: Thu, 18 Aug 2016 12:20:35 +0200 Subject: [PATCH] Get rid of array-bounds warning in __kernel_rem_pio2[f] with gcc 6.1 -O3. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On s390x I get the following werror when build with gcc 6.1 (or current gcc head) and -O3: ../sysdeps/ieee754/dbl-64/k_rem_pio2.c: In function ‘__kernel_rem_pio2’: ../sysdeps/ieee754/dbl-64/k_rem_pio2.c:254:18: error: array subscript is below array bounds [-Werror=array-bounds] for (k = 1; iq[jk - k] == 0; k++) ~~^~~~~~~~ I get the same error with sysdeps/ieee754/flt-32/k_rem_pio2f.c. This patch adds DIAG_* macros around it. ChangeLog: * sysdeps/ieee754/dbl-64/k_rem_pio2.c (__kernel_rem_pio2): Use DIAG_*_NEEDS_COMMENT macro to get rid of array-bounds warning. * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f): Likewise. --- ChangeLog | 7 +++++++ sysdeps/ieee754/dbl-64/k_rem_pio2.c | 10 ++++++++++ sysdeps/ieee754/flt-32/k_rem_pio2f.c | 10 ++++++++++ 3 files changed, 27 insertions(+) diff --git a/ChangeLog b/ChangeLog index e95dbd51ba..59c68d8b9d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2016-08-18 Stefan Liebler + + * sysdeps/ieee754/dbl-64/k_rem_pio2.c (__kernel_rem_pio2): + Use DIAG_*_NEEDS_COMMENT macro to get rid of array-bounds warning. + * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f): + Likewise. + 2016-08-18 Florian Weimer [BZ #16907] diff --git a/sysdeps/ieee754/dbl-64/k_rem_pio2.c b/sysdeps/ieee754/dbl-64/k_rem_pio2.c index e58c9e854c..d853b65a05 100644 --- a/sysdeps/ieee754/dbl-64/k_rem_pio2.c +++ b/sysdeps/ieee754/dbl-64/k_rem_pio2.c @@ -132,6 +132,7 @@ static char rcsid[] = "$NetBSD: k_rem_pio2.c,v 1.7 1995/05/10 20:46:25 jtc Exp $ #include #include +#include static const int init_jk[] = {2,3,4,6}; /* initial value for jk */ @@ -251,8 +252,17 @@ recompute: j |= iq[i]; if (j == 0) /* need recomputation */ { + /* On s390x gcc 6.1 -O3 produces the warning "array subscript is below + array bounds [-Werror=array-bounds]". Only __ieee754_rem_pio2l + calls __kernel_rem_pio2 for normal numbers and |x| > pi/4 in case + of ldbl-96 and |x| > 3pi/4 in case of ldbl-128[ibm]. + Thus x can't be zero and ipio2 is not zero, too. Thus not all iq[] + values can't be zero. */ + DIAG_PUSH_NEEDS_COMMENT; + DIAG_IGNORE_NEEDS_COMMENT (6.1, "-Warray-bounds"); for (k = 1; iq[jk - k] == 0; k++) ; /* k = no. of terms needed */ + DIAG_POP_NEEDS_COMMENT; for (i = jz + 1; i <= jz + k; i++) /* add q[jz+1] to q[jz+k] */ { diff --git a/sysdeps/ieee754/flt-32/k_rem_pio2f.c b/sysdeps/ieee754/flt-32/k_rem_pio2f.c index 392afdbb6c..52ffb09f0e 100644 --- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c +++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c @@ -19,6 +19,7 @@ static char rcsid[] = "$NetBSD: k_rem_pio2f.c,v 1.4 1995/05/10 20:46:28 jtc Exp #include #include +#include /* In the float version, the input parameter x contains 8 bit integers, not 24 bit integers. 113 bit precision is not supported. */ @@ -122,7 +123,16 @@ recompute: j = 0; for (i=jz-1;i>=jk;i--) j |= iq[i]; if(j==0) { /* need recomputation */ + /* On s390x gcc 6.1 -O3 produces the warning "array subscript is + below array bounds [-Werror=array-bounds]". Only + __ieee754_rem_pio2f calls __kernel_rem_pio2f for normal + numbers and |x| ~> 2^7*(pi/2). Thus x can't be zero and + ipio2 is not zero, too. Thus not all iq[] values can't be + zero. */ + DIAG_PUSH_NEEDS_COMMENT; + DIAG_IGNORE_NEEDS_COMMENT (6.1, "-Warray-bounds"); for(k=1;iq[jk-k]==0;k++); /* k = no. of terms needed */ + DIAG_POP_NEEDS_COMMENT; for(i=jz+1;i<=jz+k;i++) { /* add q[jz+1] to q[jz+k] */ f[jx+i] = (float) ipio2[jv+i];