From patchwork Thu Jul 7 08:22:46 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stefan Liebler X-Patchwork-Id: 13694 Received: (qmail 98603 invoked by alias); 7 Jul 2016 08:22:58 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 98585 invoked by uid 89); 7 Jul 2016 08:22:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.6 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, RP_MATCHES_RCVD, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:1930, jkk X-HELO: plane.gmane.org To: libc-alpha@sourceware.org From: Stefan Liebler Subject: [PATCH] Get rid of array-bounds warning in __kernel_rem_pio2[f] with gcc 6.1 -O3. Date: Thu, 7 Jul 2016 10:22:46 +0200 Lines: 71 Message-ID: <577E1156.2030604@linux.vnet.ibm.com> Mime-Version: 1.0 Cc: Adhemerval Zanella , "Joseph S. Myers" X-Mozilla-News-Host: news://news.gmane.org:119 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 Hi, while testing, I've got the following werror on s390x 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. Does anybody else get this warning on another architecture, too? This patch adds a check so that the index is always >= 0. Afterwards glibc builds/tests fine with gcc 6.1 and -O3. Okay to commit? Before or after release? Bye Stefan ChangeLog: * sysdeps/ieee754/dbl-64/k_rem_pio2.c (__kernel_rem_pio2): Add test to ensure that array-index is >= 0. * sysdeps/ieee754/flt-32/k_rem_pio2f.c (__kernel_rem_pio2f): Likewise. diff --git a/sysdeps/ieee754/dbl-64/k_rem_pio2.c b/sysdeps/ieee754/dbl-64/k_rem_pio2.c index e58c9e8..4fe14de 100644 --- a/sysdeps/ieee754/dbl-64/k_rem_pio2.c +++ b/sysdeps/ieee754/dbl-64/k_rem_pio2.c @@ -251,7 +251,7 @@ recompute: j |= iq[i]; if (j == 0) /* need recomputation */ { - for (k = 1; iq[jk - k] == 0; k++) + for (k = 1; k <= jk && iq[jk - k] == 0; k++) ; /* k = no. of terms needed */ 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..805f487 100644 --- a/sysdeps/ieee754/flt-32/k_rem_pio2f.c +++ b/sysdeps/ieee754/flt-32/k_rem_pio2f.c @@ -122,7 +122,8 @@ recompute: j = 0; for (i=jz-1;i>=jk;i--) j |= iq[i]; if(j==0) { /* need recomputation */ - for(k=1;iq[jk-k]==0;k++); /* k = no. of terms needed */ + for (k = 1; k <= jk && iq[jk - k] == 0; k++) + ; /* k = no. of terms needed */ for(i=jz+1;i<=jz+k;i++) { /* add q[jz+1] to q[jz+k] */ f[jx+i] = (float) ipio2[jv+i];