annotate gcc/testsuite/c-c++-common/Warray-bounds.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* PR tree-optimization/82588 - missing -Warray-bounds on an excessively
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 large index
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 { dg-do compile }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 { dg-require-effective-target alloca }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 { dg-options "-O2 -Warray-bounds -ftrack-macro-expansion=0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 #include "../gcc.dg/range.h"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 #define offsetof(T, m) __builtin_offsetof (T, m)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 typedef struct AX { int n; char ax[]; } AX;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 typedef struct A1 { int i; char a1[1]; } A1;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 typedef struct B { int i; struct A1 a1x[]; } B;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 void sink (int, ...);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 #define R(min, max) signed_range (min, max)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 #define T(expr) sink (0, expr)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 struct __attribute__ ((packed)) S16 { unsigned i: 16; };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 void farr_char (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 extern char ac[];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 T (ac[DIFF_MIN]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds of .char *\\\[]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 T (ac[-1]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 T (ac[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 T (ac[DIFF_MAX - 1]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 T (ac[DIFF_MAX]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 T (ac[DIFF_MAX + (size_t)1]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 T (ac[SIZE_MAX]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 T (ac[R (DIFF_MAX - 1, DIFF_MAX)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 T (ac[R (DIFF_MIN + 1, -1)]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 T (ac[R (DIFF_MIN + 1, 0)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 T (ac[R (-1, 0)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 T (ac[R (-1, 1)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 void farr_s16 (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 extern struct S16 ax[];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 T (ax[DIFF_MIN]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds of .(struct )?S16 *\\\[]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 T (ax[-1]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 T (ax[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 T (ax[DIFF_MAX / 2 - 1]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 T (ax[DIFF_MAX / 2]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 T (ax[DIFF_MAX / 2 + (size_t)1]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 T (ax[SIZE_MAX]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 T (ax[R (DIFF_MIN, -1)]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 T (ax[R (DIFF_MAX / 2 - 1, DIFF_MAX)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 T (ax[R (DIFF_MAX / 2, DIFF_MAX)]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 void farr_s16_7 (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 extern struct S16 ax_7[][7];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 T (ax_7[0][DIFF_MIN]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds of .(struct )?S16 *\\\[7]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 T (ax_7[0][-1]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 T (ax_7[0][0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 T (ax_7[0][7]); /* { dg-warning "array subscript 7 is above array bounds of .(struct )?S16 *\\\[7]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 T (ax_7[0][8]); /* { dg-warning "array subscript 8 is above array bounds of .(struct )?S16 *\\\[7]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 T (ax_7[0][DIFF_MAX / 2]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 T (ax_7[0][SIZE_MAX]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 T (ax_7[DIFF_MIN][0]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds of .(struct )?S16 *\\\[]\\\[7]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 T (ax_7[-1][0]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 T (ax_7[DIFF_MAX / 2][0]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 T (ax_7[SIZE_MAX][0]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 ptrdiff_t i = R (DIFF_MIN, -1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 T (ax_7[i][0]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 T (ax_7[R (DIFF_MIN, -1)][0]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 T (ax_7[R (DIFF_MIN, 0)][0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 T (ax_7[R (-2, -1)][0]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 T (ax_7[R (-1, 0)][0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 T (ax_7[R (-1, 1)][0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 T (ax_7[R (-1, 7)][0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 T (ax_7[R (-1, DIFF_MAX)][0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 T (ax_7[R ( 1, DIFF_MAX)][0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 T (ax_7[R (DIFF_MAX / 14 - 1, DIFF_MAX)][0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 i = R (DIFF_MAX / 14, DIFF_MAX);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 T (ax_7[i][0]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 T (ax_7[0][R (DIFF_MIN, 0)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 T (ax_7[0][R (-1, 0)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 T (ax_7[0][R (-1, 1)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 T (ax_7[0][R (-1, 7)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 T (ax_7[0][R (-1, DIFF_MAX)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 T (ax_7[0][R (-1, DIFF_MAX)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 T (ax_7[0][R (1, DIFF_MAX)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 T (ax_7[0][R (7, DIFF_MAX)]); /* { dg-warning "array subscript 7 is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 void farr_x_5_7 (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 extern struct S16 a[][5][7];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 T (a[0][0][-3]); /* { dg-warning "array subscript -3 is below array bounds of .(struct )?S16 *\\\[7]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112 T (a[0][-2][0]); /* { dg-warning "array subscript -2 is below array bounds of .(struct )?S16 *\\\[5]\\\[7]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 T (a[-1][0][0]); /* { dg-warning "array subscript -1 is below array bounds of .(struct )?S16 *\\\[]\\\[5]\\\[7]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114 T (a[R (-4, -3)][0][0]); /* { dg-warning "array subscript -3 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 T (a[0][R (-3, -2)][0]); /* { dg-warning "array subscript -2 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116 T (a[0][0][R (-2, -1)]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
120 void fax (struct AX *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
121 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
122 T (p->ax[DIFF_MIN]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
123 T (p->ax[-1]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
124 T (p->ax[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125 T (p->ax[DIFF_MAX - sizeof *p - 1]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126 T (p->ax[DIFF_MAX - sizeof *p]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127 T (p->ax[DIFF_MAX - sizeof *p + 1]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128 T (p->ax[SIZE_MAX]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129 T (p->ax[R (DIFF_MIN, -1)]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
130 T (p->ax[R (-1, 1)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
131 T (p->ax[R (0, DIFF_MAX - 1)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
132 T (p->ax[R (DIFF_MAX - 1, DIFF_MAX)]);/* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
133 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
134
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
135 void fa1 (struct A1 *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
136 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
137 T (p->a1[DIFF_MIN]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
138 T (p->a1[-1]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
139 T (p->a1[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
140 T (p->a1[9]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
141 T (p->a1[DIFF_MAX - offsetof (A1, a1) - 1]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
142 T (p->a1[DIFF_MAX - offsetof (A1, a1)]);/* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
143 T (p->a1[DIFF_MAX - offsetof (A1, a1) + 1]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
144 T (p->a1[SIZE_MAX]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
145 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
146
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
147 void fb (struct B *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
148 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
149 T (p->a1x->a1[DIFF_MIN]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
150 T (p->a1x->a1[-1]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
151 T (p->a1x->a1[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
152 T (p->a1x->a1[9]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
153 T (p->a1x->a1[DIFF_MAX - sizeof *p]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
154 T (p->a1x->a1[DIFF_MAX - sizeof *p + 1]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
155 T (p->a1x->a1[SIZE_MAX]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
156
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
157 T (p->a1x[1].a1[DIFF_MIN]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
158 T (p->a1x[1].a1[-1]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
159 T (p->a1x[1].a1[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
160 T (p->a1x[1].a1[9]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
161 T (p->a1x[1].a1[DIFF_MAX - sizeof *p]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
162 T (p->a1x[1].a1[DIFF_MAX - sizeof *p + 1]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
163 T (p->a1x[1].a1[SIZE_MAX]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
164
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
165 T (p->a1x[2].a1[DIFF_MIN]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
166 T (p->a1x[2].a1[-1]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
167 T (p->a1x[2].a1[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
168 T (p->a1x[2].a1[9]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
169 T (p->a1x[2].a1[DIFF_MAX - sizeof *p]);/* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
170 T (p->a1x[2].a1[DIFF_MAX - sizeof *p + 1]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
171 T (p->a1x[2].a1[SIZE_MAX]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
172
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
173 T (p->a1x[3].a1[DIFF_MIN]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
174 T (p->a1x[3].a1[-1]); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
175 T (p->a1x[3].a1[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
176 T (p->a1x[3].a1[9]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
177
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
178 T (p->a1x[9].a1[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
179
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
180 enum { MAX = (DIFF_MAX - sizeof *p) / sizeof *p->a1x };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
181
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
182 T (p->a1x[DIFF_MIN].a1); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
183 T (p->a1x[-1].a1); /* { dg-warning "array subscript -1 is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
184 T (p->a1x[MAX].a1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
185 T (p->a1x[MAX + 2].a1); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
186
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
187 T (p->a1x[DIFF_MAX].a1); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
188 T (p->a1x[SIZE_MAX].a1); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
189
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
190 T (p->a1x[DIFF_MIN].a1[0]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
191 T (p->a1x[-1].a1[0]) /* { dg-warning "array subscript -1 is below array bounds" } */;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
192 T (p->a1x[MAX - 1].a1[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
193 T (p->a1x[MAX].a1[0]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
194 T (p->a1x[MAX + 1].a1[0]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
195
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
196 T (p->a1x[DIFF_MAX].a1[0]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
197 T (p->a1x[SIZE_MAX].a1[0]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
198 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
199
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
200 void f_cststring (int i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
201 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
202 T (""[DIFF_MIN]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds of .(const )?char *\\\[1]" "string" { xfail lp64 } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
203 T (""[DIFF_MIN + 1]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds of .(const )?char *\\\[1]" "string" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
204 T (""[-1]); /* { dg-warning "array subscript -1 is below array bounds of .(const )?char *\\\[1]" "string" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
205 T (""[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
206 T (""[1]); /* { dg-warning "array subscript 1 is above array bounds of .(const )?char *\\\[1]" "string" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
207 T ("0"[2]); /* { dg-warning "array subscript 2 is above array bounds of .(const )?char *\\\[2]" "string" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
208 T ("012"[2]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
209 T ("012"[3]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
210 T ("012"[4]); /* { dg-warning "array subscript 4 is above array bounds of .(const )?char *\\\[4]" "string" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
211 T ("0123"[DIFF_MAX]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds of .(const )?char *\\\[5]" "string" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
212 T ("0123"[SIZE_MAX]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds of .(const )?char *\\\[5]" "string" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
213 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
214
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
215 void fb_strlen (struct B *p)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
216 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
217 #define strlen __builtin_strlen
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
218
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
219 T (strlen (&p->a1x[0].a1[2])); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" "strlen" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
220 T (strlen (p->a1x[0].a1 + 2)); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" "strlen" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
221 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
222
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
223
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
224 void f_vla (unsigned n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
225 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
226 char vla[n];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
227
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
228 T (vla[DIFF_MIN]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds" "vla" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
229 T (vla[-1]); /* { dg-warning "array subscript -1 is below array bounds" "vla" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
230 T (vla[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
231 T (vla[1]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
232 T (vla[n - 1]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
233 /* It would be nice to diagnose this. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
234 T (vla[n]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" "bug 82608" { xfail *-*-*} } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
235 T (vla[DIFF_MAX]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds" "vla" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
236 }