Get rid of array-bounds warning in __kernel_rem_pio2[f] with gcc 6.1 -O3.

Message ID 06066615-74fd-49a0-a1a1-beff62d12f3c@linux.vnet.ibm.com
State Committed
Headers

Commit Message

Stefan Liebler Aug. 17, 2016, 8:22 a.m. UTC
  On 08/10/2016 01:38 PM, Joseph Myers wrote:
> On Tue, 2 Aug 2016, Stefan Liebler wrote:
>
>> diff --git a/sysdeps/ieee754/dbl-64/k_rem_pio2.c b/sysdeps/ieee754/dbl-64/k_rem_pio2.c
>
>> +	  /* 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_pio2f() for normal numbers and |x| > 3pi/4.
>
> __kernel_rem_pio2f seems like the wrong function to reference in a comment
> in this file.  Please review the actual call sequences in each case to
> make sure the right functions are referenced.  Also, the GNU Coding
> Standards say not to use () after a function name when referencing the
> function:
>
>     Please do not write @samp{()} after a function name just to indicate
>     it is a function.  @code{foo ()} is not a function, it is a function
>     call with no arguments.
>
>> +		/* 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
>
> Likewise, don't use () after the function name.
>
I've reviewed the call sequences and adjusted the comment and removed 
the () after the function names.
Here is the updated patch.

Okay to commit?

Bye
Stefan

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.
  

Comments

Joseph Myers Aug. 17, 2016, 3:32 p.m. UTC | #1
On Wed, 17 Aug 2016, Stefan Liebler wrote:

> I've reviewed the call sequences and adjusted the comment and removed the ()
> after the function names.
> Here is the updated patch.
> 
> Okay to commit?

OK.
  
Stefan Liebler Aug. 18, 2016, 10:42 a.m. UTC | #2
On 08/17/2016 05:32 PM, Joseph Myers wrote:
> On Wed, 17 Aug 2016, Stefan Liebler wrote:
>
>> I've reviewed the call sequences and adjusted the comment and removed the ()
>> after the function names.
>> Here is the updated patch.
>>
>> Okay to commit?
>
> OK.
>
Commited.
  

Patch

diff --git a/sysdeps/ieee754/dbl-64/k_rem_pio2.c b/sysdeps/ieee754/dbl-64/k_rem_pio2.c
index e58c9e8..d853b65 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 <math.h>
 #include <math_private.h>
+#include <libc-internal.h>
 
 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 392afdb..52ffb09 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 <math.h>
 #include <math_private.h>
+#include <libc-internal.h>
 
 /* 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];