Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/gcc.dg/Warray-bounds-3.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 1830386684a0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/gcc.dg/Warray-bounds-3.c Fri Oct 27 22:46:09 2017 +0900 @@ -0,0 +1,108 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -Warray-bounds" } */ +/* based on PR 31227 */ + +typedef __SIZE_TYPE__ size_t; + +extern size_t strlen (const char *); + +struct iovec +{ + void *iov_base; + size_t iov_len; +}; + +struct S +{ + const char *abday[7]; + const char *day[7]; + const char *abmon[12]; + const char *mon[12]; + const char *am_pm[2]; +}; + +extern void foo (size_t, struct iovec *); + +void +bar (struct S *time) +{ + struct iovec iov[43]; + size_t cnt; + iov[0].iov_base = (void *) "abc"; + iov[0].iov_len = 3; + + iov[1].iov_base = (void *) "def"; + iov[1].iov_len = 3; + + 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; + } + + foo (2 + cnt, iov); +} + +struct malloc_chunk { + long prev_size; + long size; + struct malloc_chunk* fd; + struct malloc_chunk* bk; +}; +typedef struct malloc_chunk* mchunkptr; +struct malloc_state { + mchunkptr top; + mchunkptr last_remainder; + mchunkptr bins[128 * 2 - 2]; +}; +#define bin_at(m, i) \ + (mchunkptr) (((char *) &((m)->bins[((i) - 1) * 2])) \ + - __builtin_offsetof (struct malloc_chunk, fd)) + +void malloc_init_state(struct malloc_state *av) +{ + int i; + mchunkptr bin; + + for (i = 1; i < 128; ++i) { + bin = bin_at(av,i); + bin->fd = bin->bk = bin; + } +} + +typedef unsigned short WCHAR; +typedef WCHAR *LPWSTR; + +static void g(LPWSTR dest, int len) { + dest[len-1] = 0; +} + +void f() { + WCHAR szPathW[260]; + + g(szPathW, 260); +}