comparison 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
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -Warray-bounds" } */
3 /* based on PR 31227 */
4
5 typedef __SIZE_TYPE__ size_t;
6
7 extern size_t strlen (const char *);
8
9 struct iovec
10 {
11 void *iov_base;
12 size_t iov_len;
13 };
14
15 struct S
16 {
17 const char *abday[7];
18 const char *day[7];
19 const char *abmon[12];
20 const char *mon[12];
21 const char *am_pm[2];
22 };
23
24 extern void foo (size_t, struct iovec *);
25
26 void
27 bar (struct S *time)
28 {
29 struct iovec iov[43];
30 size_t cnt;
31 iov[0].iov_base = (void *) "abc";
32 iov[0].iov_len = 3;
33
34 iov[1].iov_base = (void *) "def";
35 iov[1].iov_len = 3;
36
37 for (cnt = 0; cnt < 7; ++cnt)
38 {
39 iov[2 + cnt].iov_base = (void *) (time->abday[cnt] ?: "");
40 iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
41 }
42
43 for (; cnt < 14; ++cnt)
44 {
45 iov[2 + cnt].iov_base = (void *) (time->day[cnt - 7] ?: "");
46 iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
47 }
48
49 for (; cnt < 26; ++cnt)
50 {
51 iov[2 + cnt].iov_base = (void *) (time->abmon[cnt - 14] ?: "");
52 iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
53 }
54
55 for (; cnt < 38; ++cnt)
56 {
57 iov[2 + cnt].iov_base = (void *) (time->mon[cnt - 26] ?: "");
58 iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
59 }
60
61 for (; cnt < 40; ++cnt)
62 {
63 iov[2 + cnt].iov_base = (void *) (time->am_pm[cnt - 38] ?: "");
64 iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1;
65 }
66
67 foo (2 + cnt, iov);
68 }
69
70 struct malloc_chunk {
71 long prev_size;
72 long size;
73 struct malloc_chunk* fd;
74 struct malloc_chunk* bk;
75 };
76 typedef struct malloc_chunk* mchunkptr;
77 struct malloc_state {
78 mchunkptr top;
79 mchunkptr last_remainder;
80 mchunkptr bins[128 * 2 - 2];
81 };
82 #define bin_at(m, i) \
83 (mchunkptr) (((char *) &((m)->bins[((i) - 1) * 2])) \
84 - __builtin_offsetof (struct malloc_chunk, fd))
85
86 void malloc_init_state(struct malloc_state *av)
87 {
88 int i;
89 mchunkptr bin;
90
91 for (i = 1; i < 128; ++i) {
92 bin = bin_at(av,i);
93 bin->fd = bin->bk = bin;
94 }
95 }
96
97 typedef unsigned short WCHAR;
98 typedef WCHAR *LPWSTR;
99
100 static void g(LPWSTR dest, int len) {
101 dest[len-1] = 0;
102 }
103
104 void f() {
105 WCHAR szPathW[260];
106
107 g(szPathW, 260);
108 }