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" } } */