annotate gcc/testsuite/gcc.dg/Warray-bounds-32.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
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/83776: missing -Warray-bounds indexing past the end
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 of a string literal
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 Test to exercise indices into wide string literals.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 { dg-do compile }
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 "range.h"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 #define MAX DIFF_MAX
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 #define MIN DIFF_MIN
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 typedef __WCHAR_TYPE__ wchar_t;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 #define W2 L"12"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 #define W3 L"123"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 #define W4 L"1234"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 #define W7 L"1234567"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 #define W8 L"12345678"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 #define W9 L"123456789"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 void sink (int);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 #define T(expr) sink (expr)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 void wide_direct_cst (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 T (W9[MIN]); /* { dg-warning "array subscript -\[0-9\]+ is below array bounds of .\[a-z \]+\\\[10]" "bug 86611" { xfail ilp32 } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 T (W9[-1]); /* { dg-warning "array subscript -1 is below array bounds of .\[a-z \]+\\\[10]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 T (W9[11]); /* { dg-warning "array subscript 11 is above array bounds of .\[a-z \]+\\\[10]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 T (W9[MAX]); /* { dg-warning "array subscript \[0-9\]+ is above array bounds of .\[a-z \]+\\\[10]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 void wide_ptr_deref_cst (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 const wchar_t *p = W8 + 9;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 T (*p); /* { dg-warning "array subscript 9 is outside array bounds of .\[a-z \]+\\\[9]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 T (p[1]); /* { dg-warning "array subscript 10 is outside array bounds of .\[a-z \]+\\\[9]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 T (p[99]); /* { dg-warning "array subscript 108 is outside array bounds of .\[a-z \]+\\\[9]." } */
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 wide_ptr_index_cst (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 const wchar_t *p = W7;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 T (p[1]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 T (p[8]); /* { dg-warning "array subscript 8 is outside array bounds of .\[a-z \]+\\\[8]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 T (p[99]); /* { dg-warning "array subscript 99 is outside array bounds of .\[a-z \]+\\\[8]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 T (p[MAX]); /* { dg-warning "array subscript -?\[0-9\]+ is outside array bounds of .\[a-z \]+\\\[8]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 void wide_direct_range (ptrdiff_t i, size_t j)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 T (W9[i]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 T (W9[j]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 T (W9[SR (MIN, -9)]); /* { dg-warning "array subscript -9 is below array bounds of .\[a-z \]+\\\[10]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 T (W9[SR (MIN, -1)]); /* { dg-warning "array subscript -1 is below array bounds of .\[a-z \]+\\\[10]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 T (W9[SR (MIN, 0)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 T (W9[SR (-2, -1)]); /* { dg-warning "array subscript -1 is below array bounds of .\[a-z \]+\\\[10]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 T (W9[SR (1, 2)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 T (W9[SR (1, 9)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 T (W9[SR (1, 999)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 T (W9[SR (9, 999)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 T (W9[SR (10, 999)]); /* { dg-warning "array subscript 10 is above array bounds of .\[a-z \]+\\\[10]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 T (W9[SR (99, MAX)]); /* { dg-warning "array subscript 99 is above array bounds of .\[a-z \]+\\\[10]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 void wide_ptr_deref_range (ptrdiff_t i, size_t j)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 const wchar_t *p;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 p = W8 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 T (*p);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 p = W8 + j;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 T (*p);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 p = W8 + SR (-9, -1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 T (*p); /* { dg-warning "array subscript \\\[-9, -1] is outside array bounds of .\[a-z \]+\\\[9]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 p = W8 + SR (-9, 0);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 T (*p);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 p = W8 + SR (-9, 9);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 T (*p);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 p = W8 + SR (9, 123);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 T (*p); /* { dg-warning "array subscript \\\[9, 123] is outside array bounds of .\[a-z \]+\\\[9]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 void wide_ptr_index_range (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 const wchar_t *p;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 p = W7;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 T (p[SR (-9, -1)]); /* { dg-warning "array subscript \\\[-9, -1] is outside array bounds of .\[a-z \]+\\\[8]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 T (p[SR (-8, 0)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 T (p[SR (0, MAX)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 T (p[SR (1, 9)]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 T (p[SR (8, 9)]); /* { dg-warning "array subscript \\\[8, 9] is outside array bounds of .\[a-z \]+\\\[8]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104 p = W7 + SR (4, 6);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 T (p[5]); /* { dg-warning "array subscript \\\[9, 11] is outside array bounds of .\[a-z \]+\\\[8]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108 void wide_ptr_index_range_1 (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 int i = SR (1, 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112 const wchar_t *p1 = W2 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114 T (p1[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 int i = SR (1, 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118 const wchar_t *p1 = W2 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
120 T (p1[1]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
121 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
122 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
123 int i = SR (1, 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
124 const wchar_t *p1 = W2 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126 T (p1[2]); /* { dg-warning "array subscript \\\[3, 4] is outside array bounds of .\[a-z \]+\\\[3]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
130 void wide_ptr_index_range_chain (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
131 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
132 int i = SR (1, 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
133 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
134 const wchar_t *p1 = W2 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
135 const wchar_t *p2 = p1 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
136 const wchar_t *p3 = p2 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
137
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
138 T (p1[-3]); /* { dg-warning "array subscript \\\[-2, -1] is outside array bounds of .\[a-z \]+\\\[3]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
139 T (p1[-2]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
140 T (p1[-1]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
141 T (p1[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
142 T (p1[1]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
143 T (p1[2]); /* { dg-warning "array subscript \\\[3, 4] is outside array bounds of .\[a-z \]+\\\[3]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
144
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
145 T (p2[-5]); /* { dg-warning "array subscript \\\[-3, -1] is outside array bounds of .\[a-z \]+\\\[3]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
146 T (p2[-4]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
147 T (p2[-1]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
148 T (p2[0]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
149 T (p2[1]); /* { dg-warning "array subscript \\\[3, 5] is outside array bounds of .\[a-z \]+\\\[3]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
150
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
151 T (p3[0]); /* { dg-warning "array subscript \\\[3, 6] is outside array bounds of .\[a-z \]+\\\[3]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
152 T (p3[1]); /* { dg-warning "array subscript \\\[4, 7] is outside array bounds of .\[a-z \]+\\\[3]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
153 T (p3[9999]); /* { dg-warning "array subscript \\\[10002, 10005] is outside array bounds of .\[a-z \]+\\\[3]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
154
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
155 /* Large offsets are indistinguishable from negative values. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
156 T (p3[DIFF_MAX]); /* { dg-warning "array subscript" "bug" { xfail *-*-* } } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
157 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
158
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
159 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
160 const wchar_t *p1 = W3 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
161 const wchar_t *p2 = p1 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
162 const wchar_t *p3 = p2 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
163 const wchar_t *p4 = p3 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
164
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
165 T (p1[-3]); /* { dg-warning "array subscript \\\[-2, -1] is outside array bounds of .\[a-z \]+\\\[4]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
166 T (p1[-2]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
167 T (p1[1]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
168 T (p1[2]);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
169 T (p1[3]); /* { dg-warning "array subscript \\\[4, 5] is outside array bounds of .\[a-z \]+\\\[4]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
170
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
171 T (p3[1]); /* { dg-warning "array subscript \\\[4, 7] is outside array bounds of .\[a-z \]+\\\[4]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
172 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
173 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
174
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
175 void wide_ptr_index_range_4 (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
176 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
177 int i = SR (1, 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
178 const wchar_t *p1 = W4 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
179 const wchar_t *p2 = p1 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
180 const wchar_t *p3 = p2 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
181 const wchar_t *p4 = p3 + i;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
182
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
183 T (p4[1]); /* { dg-warning "array subscript \\\[5, 9] is outside array bounds of .\[a-z \]+\\\[5]." } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
184 }