Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/strlenopt-61.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
1 /* PR tree-optimization/89688 - -Wstringop-overflow confused by const | |
2 2D array of char | |
3 { dg-do compile } | |
4 { dg-options "-Wall -fdump-tree-gimple -fdump-tree-optimized" } */ | |
5 | |
6 typedef __SIZE_TYPE__ size_t; | |
7 | |
8 size_t strlen (const char*); | |
9 #define CAT(x, y) x ## y | |
10 #define CONCAT(x, y) CAT (x, y) | |
11 #define FAILNAME(name) CONCAT (call_ ## name ##_on_line_, __LINE__) | |
12 | |
13 #define FAIL(name) do { \ | |
14 extern __attribute__ ((noreturn)) void FAILNAME (name) (void); \ | |
15 FAILNAME (name)(); \ | |
16 } while (0) | |
17 | |
18 #define A(ref, len) \ | |
19 if (strlen (ref) != len) FAIL (failure); else (void)0 | |
20 | |
21 const char a3_4[3][4] = { { 1 }, { 1, 2 }, { 1, 2, 3 } }; | |
22 | |
23 void test_a4_4 (void) | |
24 { | |
25 A (a3_4[0], 1); | |
26 A (a3_4[1], 2); | |
27 A (a3_4[2], 3); | |
28 | |
29 A (&a3_4[0][0], 1); | |
30 A (&a3_4[0][1], 0); | |
31 A (&a3_4[0][2], 0); | |
32 A (&a3_4[0][3], 0); | |
33 | |
34 A (&a3_4[1][0], 2); | |
35 A (&a3_4[1][1], 1); | |
36 A (&a3_4[1][2], 0); | |
37 A (&a3_4[1][3], 0); | |
38 | |
39 A (&a3_4[2][0], 3); | |
40 A (&a3_4[2][1], 2); | |
41 A (&a3_4[2][2], 1); | |
42 A (&a3_4[2][3], 0); | |
43 } | |
44 | |
45 | |
46 const char a3_4_5[3][4][5] = | |
47 { | |
48 { { 1 }, { 1, 2 }, { 1, 2, 3 }, { 1, 2, 3, 4 } }, | |
49 { { 1, 2 }, { 1, 2, 3 }, { 1, 2, 3, 4 }, { 1 } }, | |
50 { { 1, 2, 3 }, { 1, 2, 3, 4 }, { 1 }, { 1, 2 } }, | |
51 }; | |
52 | |
53 void test_a3_4_5 (void) | |
54 { | |
55 A (a3_4_5[0][0], 1); | |
56 A (a3_4_5[0][1], 2); | |
57 A (a3_4_5[0][2], 3); | |
58 A (a3_4_5[0][3], 4); | |
59 | |
60 A (a3_4_5[1][0], 2); | |
61 A (a3_4_5[1][1], 3); | |
62 A (a3_4_5[1][2], 4); | |
63 A (a3_4_5[1][3], 1); | |
64 | |
65 A (a3_4_5[2][0], 3); | |
66 A (a3_4_5[2][1], 4); | |
67 A (a3_4_5[2][2], 1); | |
68 A (a3_4_5[2][3], 2); | |
69 } | |
70 | |
71 | |
72 struct S | |
73 { | |
74 char a3[3]; | |
75 char a4_5[4][5]; | |
76 }; | |
77 | |
78 const struct S sa4[4] = | |
79 { | |
80 { .a3 = { 0 }, | |
81 .a4_5 = | |
82 { | |
83 { 1 }, { 1, 2 }, { 1, 2, 3 }, { 1, 2, 3, 4 } | |
84 } | |
85 }, | |
86 { .a3 = { 1 }, | |
87 .a4_5 = | |
88 { | |
89 { 1, 2 }, { 1, 2, 3 }, { 1, 2, 3, 4 }, { 1 } | |
90 } | |
91 }, | |
92 { .a3 = { 1, 2 }, | |
93 .a4_5 = | |
94 { | |
95 { 1, 2, 3 }, { 1, 2, 3, 4 }, { 1 }, { 1, 2 } | |
96 } | |
97 }, | |
98 { .a3 = { 1 }, | |
99 .a4_5 = | |
100 { | |
101 { 1, 2, 3, 4 }, "1", { 1, 2 }, "123" | |
102 } | |
103 } | |
104 }; | |
105 | |
106 void test_sa4 (void) | |
107 { | |
108 A (sa4[0].a3, 0); | |
109 A (sa4[0].a4_5[0], 1); | |
110 A (sa4[0].a4_5[1], 2); | |
111 A (sa4[0].a4_5[2], 3); | |
112 A (sa4[0].a4_5[3], 4); | |
113 | |
114 A (sa4[1].a3, 1); | |
115 A (sa4[1].a4_5[0], 2); | |
116 A (sa4[1].a4_5[1], 3); | |
117 A (sa4[1].a4_5[2], 4); | |
118 A (sa4[1].a4_5[3], 1); | |
119 | |
120 A (sa4[2].a3, 2); | |
121 A (sa4[2].a4_5[0], 3); | |
122 A (sa4[2].a4_5[1], 4); | |
123 A (sa4[2].a4_5[2], 1); | |
124 A (sa4[2].a4_5[3], 2); | |
125 | |
126 A (sa4[3].a3, 1); | |
127 A (sa4[3].a4_5[0], 4); | |
128 A (sa4[3].a4_5[1], 1); | |
129 A (sa4[3].a4_5[2], 2); | |
130 A (sa4[3].a4_5[3], 3); | |
131 } | |
132 | |
133 | |
134 struct T | |
135 { | |
136 struct S sa2[2]; | |
137 char a4[4]; | |
138 }; | |
139 | |
140 const struct T ta2[2] = | |
141 { | |
142 [0] = | |
143 { | |
144 .sa2 = | |
145 { | |
146 [0] = | |
147 { .a3 = { 0 }, | |
148 .a4_5 = | |
149 { | |
150 { 1 }, { 1, 2 }, { 1, 2, 3 }, { 1, 2, 3, 4 } | |
151 } | |
152 }, | |
153 [1] = | |
154 { .a3 = { 1 }, | |
155 .a4_5 = | |
156 { | |
157 { 1, 2 }, { 1, 2, 3 }, { 1, 2, 3, 4 }, { 1 } | |
158 } | |
159 }, | |
160 }, | |
161 .a4 = "12" | |
162 }, | |
163 | |
164 [1] = | |
165 { | |
166 .sa2 = | |
167 { | |
168 [0] = | |
169 { .a3 = { 1, 2 }, | |
170 .a4_5 = | |
171 { | |
172 { 1, 2, 3 }, { 1, 2, 3, 4 }, { 1 }, { 1, 2 } | |
173 } | |
174 }, | |
175 { .a3 = { 1 }, | |
176 .a4_5 = | |
177 { | |
178 { 1, 2, 3, 4 }, "1", { 1, 2 }, "123" | |
179 } | |
180 } | |
181 }, | |
182 .a4 = "123" | |
183 } | |
184 }; | |
185 | |
186 void test_ta2 (void) | |
187 { | |
188 A (ta2[0].sa2[0].a3, 0); | |
189 A (ta2[0].sa2[0].a4_5[0], 1); | |
190 A (ta2[0].sa2[0].a4_5[1], 2); | |
191 A (ta2[0].sa2[0].a4_5[2], 3); | |
192 A (ta2[0].sa2[0].a4_5[3], 4); | |
193 | |
194 A (ta2[0].sa2[1].a3, 1); | |
195 A (ta2[0].sa2[1].a4_5[0], 2); | |
196 A (ta2[0].sa2[1].a4_5[1], 3); | |
197 A (ta2[0].sa2[1].a4_5[2], 4); | |
198 A (ta2[0].sa2[1].a4_5[3], 1); | |
199 | |
200 A (ta2[0].a4, 2); | |
201 | |
202 A (ta2[1].sa2[0].a3, 2); | |
203 A (ta2[1].sa2[0].a4_5[0], 3); | |
204 A (ta2[1].sa2[0].a4_5[1], 4); | |
205 A (ta2[1].sa2[0].a4_5[2], 1); | |
206 A (ta2[1].sa2[0].a4_5[3], 2); | |
207 | |
208 A (ta2[1].sa2[1].a3, 1); | |
209 A (ta2[1].sa2[1].a4_5[0], 4); | |
210 A (ta2[1].sa2[1].a4_5[1], 1); | |
211 A (ta2[1].sa2[1].a4_5[2], 2); | |
212 A (ta2[1].sa2[1].a4_5[3], 3); | |
213 | |
214 A (ta2[1].a4, 3); | |
215 } | |
216 | |
217 /* { dg-final { scan-tree-dump-not "failure" "optimized" } } | |
218 { dg-final { scan-tree-dump-not "strlen1" "gimple" } } */ |