This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC 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]

RE: A question about detecting array bounds for case Warray-bounds-3.c


PING...

> -----Original Message-----
> From: Jiangning Liu [mailto:jiangning.liu@arm.com]
> Sent: Thursday, September 22, 2011 10:19 AM
> To: gcc@gcc.gnu.org
> Cc: 'jakub@gcc.gnu.org'; 'mueller@gcc.gnu.org'; 'rguenth@gcc.gnu.org';
> Matthew Gretton-Dann
> Subject: A question about detecting array bounds for case Warray-
> bounds-3.c
> 
> Hi,
> 
> For case gcc/testsuite/gcc.dg/Warray-bounds-3.c, obviously it is an
> invalid C program, because the last iterations of all the loops cause
> the access of arrays is beyond the max size of corresponding array
> declarations. The condition of checking upper bound should be "<"
> rather than "<=".
> 
> Right now, GCC compiler doesn't report any warning messages for this
> case, should it be a bug in both test case and compiler?
> 
> But looking at http://gcc.gnu.org/PR31227 , it seems this test case is
> designed to be like this on purpose. Anybody can explain about this?
> 
> The case is like below,
> 
> /* { dg-do compile } */
> /* { dg-options "-O2 -Warray-bounds" } */
> /* based on PR 31227 */
> 
> struct S
> {
>   const char *abday[7];
>   const char *day[7];
>   const char *abmon[12];
>   const char *mon[12];
>   const char *am_pm[2];
> };
> 
> ...
> 
>   for (cnt = 0; cnt <= 7; ++cnt)
>     {
>       iov[2 + cnt].iov_base = (void *) (time->abday[cnt] ?: "");
>       iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
>     }
> 
>   for (; cnt <= 14; ++cnt)
>     {
>       iov[2 + cnt].iov_base = (void *) (time->day[cnt - 7] ?: "");
>       iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
>     }
> 
>   for (; cnt <= 26; ++cnt)
>     {
>       iov[2 + cnt].iov_base = (void *) (time->abmon[cnt - 14] ?: "");
>       iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
>     }
> 
>   for (; cnt <= 38; ++cnt)
>     {
>       iov[2 + cnt].iov_base = (void *) (time->mon[cnt - 26] ?: "");
>       iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
>     }
> 
>   for (; cnt <= 40; ++cnt)
>     {
>       iov[2 + cnt].iov_base =  (void *) (time->am_pm[cnt - 38] ?: "");
>       iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
>     }
> 
> Thanks,
> -Jiangning




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