Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.c-torture/execute/strlen-2.c @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
111:04ced10e8804 | 131:84e7813d76e9 |
---|---|
1 /* PR tree-optimization/86532 - Wrong code due to a wrong strlen folding */ | |
2 | |
3 extern __SIZE_TYPE__ strlen (const char*); | |
4 | |
5 static const char a[2][3] = { "1", "12" }; | |
6 static const char b[2][2][5] = { { "1", "12" }, { "123", "1234" } }; | |
7 | |
8 volatile int v0 = 0; | |
9 volatile int v1 = 1; | |
10 volatile int v2 = 2; | |
11 | |
12 #define A(expr) \ | |
13 ((expr) ? (void)0 : (__builtin_printf ("assertion on line %i: %s\n", \ | |
14 __LINE__, #expr), \ | |
15 __builtin_abort ())) | |
16 | |
17 void test_array_ref_2_3 (void) | |
18 { | |
19 A (strlen (a[v0]) == 1); | |
20 A (strlen (&a[v0][v0]) == 1); | |
21 A (strlen (&a[0][v0]) == 1); | |
22 A (strlen (&a[v0][0]) == 1); | |
23 | |
24 A (strlen (a[v1]) == 2); | |
25 A (strlen (&a[v1][0]) == 2); | |
26 A (strlen (&a[1][v0]) == 2); | |
27 A (strlen (&a[v1][v0]) == 2); | |
28 | |
29 A (strlen (&a[v1][1]) == 1); | |
30 A (strlen (&a[v1][1]) == 1); | |
31 | |
32 A (strlen (&a[v1][2]) == 0); | |
33 A (strlen (&a[v1][v2]) == 0); | |
34 | |
35 int i0 = 0; | |
36 int i1 = i0 + 1; | |
37 int i2 = i1 + 1; | |
38 | |
39 A (strlen (a[v0]) == 1); | |
40 A (strlen (&a[v0][v0]) == 1); | |
41 A (strlen (&a[i0][v0]) == 1); | |
42 A (strlen (&a[v0][i0]) == 1); | |
43 | |
44 A (strlen (a[v1]) == 2); | |
45 A (strlen (&a[v1][i0]) == 2); | |
46 A (strlen (&a[i1][v0]) == 2); | |
47 A (strlen (&a[v1][v0]) == 2); | |
48 | |
49 A (strlen (&a[v1][i1]) == 1); | |
50 A (strlen (&a[v1][i1]) == 1); | |
51 | |
52 A (strlen (&a[v1][i2]) == 0); | |
53 A (strlen (&a[v1][v2]) == 0); | |
54 } | |
55 | |
56 void test_array_off_2_3 (void) | |
57 { | |
58 A (strlen (a[0] + 0) == 1); | |
59 A (strlen (a[0] + v0) == 1); | |
60 A (strlen (a[v0] + 0) == 1); | |
61 A (strlen (a[v0] + v0) == 1); | |
62 | |
63 A (strlen (a[v1] + 0) == 2); | |
64 A (strlen (a[1] + v0) == 2); | |
65 A (strlen (a[v1] + 0) == 2); | |
66 A (strlen (a[v1] + v0) == 2); | |
67 | |
68 A (strlen (a[v1] + 1) == 1); | |
69 A (strlen (a[v1] + v1) == 1); | |
70 | |
71 A (strlen (a[v1] + 2) == 0); | |
72 A (strlen (a[v1] + v2) == 0); | |
73 | |
74 int i0 = 0; | |
75 int i1 = i0 + 1; | |
76 int i2 = i1 + 1; | |
77 | |
78 A (strlen (a[i0] + i0) == 1); | |
79 A (strlen (a[i0] + v0) == 1); | |
80 A (strlen (a[v0] + i0) == 1); | |
81 A (strlen (a[v0] + v0) == 1); | |
82 | |
83 A (strlen (a[v1] + i0) == 2); | |
84 A (strlen (a[i1] + v0) == 2); | |
85 A (strlen (a[v1] + i0) == 2); | |
86 A (strlen (a[v1] + v0) == 2); | |
87 | |
88 A (strlen (a[v1] + i1) == 1); | |
89 A (strlen (a[v1] + v1) == 1); | |
90 | |
91 A (strlen (a[v1] + i2) == 0); | |
92 A (strlen (a[v1] + v2) == 0); | |
93 } | |
94 | |
95 void test_array_ref_2_2_5 (void) | |
96 { | |
97 A (strlen (b[0][v0]) == 1); | |
98 A (strlen (b[v0][0]) == 1); | |
99 | |
100 A (strlen (&b[0][0][v0]) == 1); | |
101 A (strlen (&b[0][v0][0]) == 1); | |
102 A (strlen (&b[v0][0][0]) == 1); | |
103 | |
104 A (strlen (&b[0][v0][v0]) == 1); | |
105 A (strlen (&b[v0][0][v0]) == 1); | |
106 A (strlen (&b[v0][v0][0]) == 1); | |
107 | |
108 A (strlen (b[0][v1]) == 2); | |
109 A (strlen (b[v1][0]) == 3); | |
110 | |
111 A (strlen (&b[0][0][v1]) == 0); | |
112 A (strlen (&b[0][v1][0]) == 2); | |
113 A (strlen (&b[v0][0][0]) == 1); | |
114 | |
115 A (strlen (&b[0][v0][v0]) == 1); | |
116 A (strlen (&b[v0][0][v0]) == 1); | |
117 A (strlen (&b[v0][v0][0]) == 1); | |
118 | |
119 A (strlen (&b[0][v1][v1]) == 1); | |
120 A (strlen (&b[v1][0][v1]) == 2); | |
121 A (strlen (&b[v1][v1][0]) == 4); | |
122 A (strlen (&b[v1][v1][1]) == 3); | |
123 A (strlen (&b[v1][v1][2]) == 2); | |
124 | |
125 int i0 = 0; | |
126 int i1 = i0 + 1; | |
127 int i2 = i1 + 1; | |
128 | |
129 A (strlen (b[i0][v0]) == 1); | |
130 A (strlen (b[v0][i0]) == 1); | |
131 | |
132 A (strlen (&b[i0][i0][v0]) == 1); | |
133 A (strlen (&b[i0][v0][i0]) == 1); | |
134 A (strlen (&b[v0][i0][i0]) == 1); | |
135 | |
136 A (strlen (&b[i0][v0][v0]) == 1); | |
137 A (strlen (&b[v0][i0][v0]) == 1); | |
138 A (strlen (&b[v0][v0][i0]) == 1); | |
139 | |
140 A (strlen (b[i0][v1]) == 2); | |
141 A (strlen (b[v1][i0]) == 3); | |
142 | |
143 A (strlen (&b[i0][i0][v1]) == 0); | |
144 A (strlen (&b[i0][v1][i0]) == 2); | |
145 A (strlen (&b[v0][i0][i0]) == 1); | |
146 | |
147 A (strlen (&b[i0][v0][v0]) == 1); | |
148 A (strlen (&b[v0][i0][v0]) == 1); | |
149 A (strlen (&b[v0][v0][i0]) == 1); | |
150 | |
151 A (strlen (&b[i0][v1][v1]) == 1); | |
152 A (strlen (&b[v1][i0][v1]) == 2); | |
153 A (strlen (&b[v1][v1][i0]) == 4); | |
154 A (strlen (&b[v1][v1][i1]) == 3); | |
155 A (strlen (&b[v1][v1][i2]) == 2); | |
156 } | |
157 | |
158 void test_array_off_2_2_5 (void) | |
159 { | |
160 A (strlen (b[0][0] + v0) == 1); | |
161 A (strlen (b[0][v0] + v0) == 1); | |
162 A (strlen (b[v0][0] + v0) == 1); | |
163 A (strlen (b[v0][v0] + v0) == 1); | |
164 | |
165 A (strlen (b[0][0] + v1) == 0); | |
166 A (strlen (b[0][v1] + 0) == 2); | |
167 A (strlen (b[v0][0] + 0) == 1); | |
168 | |
169 A (strlen (b[0][v0] + v0) == 1); | |
170 A (strlen (b[v0][0] + v0) == 1); | |
171 A (strlen (b[v0][v0] + 0) == 1); | |
172 | |
173 A (strlen (b[0][v1] + v1) == 1); | |
174 A (strlen (b[v1][0] + v1) == 2); | |
175 A (strlen (b[v1][v1] + 0) == 4); | |
176 A (strlen (b[v1][v1] + 1) == 3); | |
177 A (strlen (b[v1][v1] + 2) == 2); | |
178 | |
179 int i0 = 0; | |
180 int i1 = i0 + 1; | |
181 int i2 = i1 + 1; | |
182 | |
183 A (strlen (b[i0][i0] + v0) == 1); | |
184 A (strlen (b[i0][v0] + v0) == 1); | |
185 A (strlen (b[v0][i0] + v0) == 1); | |
186 A (strlen (b[v0][v0] + v0) == 1); | |
187 | |
188 A (strlen (b[i0][i0] + v1) == 0); | |
189 A (strlen (b[i0][v1] + i0) == 2); | |
190 A (strlen (b[v0][i0] + i0) == 1); | |
191 | |
192 A (strlen (b[i0][v0] + v0) == 1); | |
193 A (strlen (b[v0][i0] + v0) == 1); | |
194 A (strlen (b[v0][v0] + i0) == 1); | |
195 | |
196 A (strlen (b[i0][v1] + v1) == 1); | |
197 A (strlen (b[v1][i0] + v1) == 2); | |
198 A (strlen (b[v1][v1] + i0) == 4); | |
199 A (strlen (b[v1][v1] + i1) == 3); | |
200 A (strlen (b[v1][v1] + i2) == 2); | |
201 } | |
202 | |
203 int main () | |
204 { | |
205 test_array_ref_2_3 (); | |
206 test_array_off_2_3 (); | |
207 | |
208 test_array_ref_2_2_5 (); | |
209 test_array_off_2_2_5 (); | |
210 } |