3 // Test for PR c++/67927 - array new expression with excessive number
4 // of elements not diagnosed.
6 // GCC uses a different maximum value at compile time and at runtime:
7 // 1) The compile-time maximum, MAX, is SIZE_MAX / 2 minus the size
8 // of a cookie (sizeof (size_t)). Exceeding the compile-time
9 // maximum is ill-formed and diagnosed. This test verifies this
11 // 2) The runtime runtime maximum is the most significant 7 bits,
12 // starting with the first most significant non-zero bit, of
13 // the dividend of the compile-time constant MAX and the product
14 // of the constant array dimensions and the element size, minus
15 // the size of the "cookie." This is also roughly (though not
16 // exactly) SIZE_MAX / 2. Exceeding the runtime maximum is
17 // diagnosed at runtime by throwing a bad_array_new_length
19 // The cookie is the number of elements in the array, and is
20 // only added for non-POD types, but the its size factors into
21 // the maximum size formula regardless.
23 // See also PR c++/19351 - integer overflow in operator new[].
26 #define MAX __SIZE_MAX__
28 typedef __typeof__ (sizeof 0) size_t;
30 void* operator new (size_t, void*);
31 void* operator new[] (size_t, void*);
35 // Exercise new expression with one-dimensional arrays of char.
36 static void __attribute__ ((used))
37 test_one_dim_char_array ()
39 p = new char [MAX]; // { dg-error "size of array" }
40 p = new char [MAX - 1]; // { dg-error "size of array" }
41 p = new char [MAX - 2]; // { dg-error "size of array" }
42 p = new char [MAX - 99]; // { dg-error "size of array" }
43 p = new char [MAX / 2]; // { dg-error "size of array" }
44 p = new char [MAX / 2 - 1]; // { dg-error "size of array" }
45 p = new char [MAX / 2 - 2]; // { dg-error "size of array" }
47 // Avoid testing the expressions below since whether or not they
48 // are accepted depends on the precision of size_t (which also
49 // determines the size of the cookie).
50 // p = new char [MAX / 2 - 3];
51 // p = new char [MAX / 2 - 4];
52 // p = new char [MAX / 2 - 5];
53 // p = new char [MAX / 2 - 6];
55 // The following expressions are accepted on ILP32 as well LP64
56 // (they will be diagnosed on LP128 if there ever is such a data
58 p = new char [MAX / 2 - 7]; // okay
59 p = new char [MAX / 2 - 8]; // okay
62 static void __attribute__ ((used))
63 test_one_dim_short_array ()
65 p = new short [MAX]; // { dg-error "size of array" }
66 p = new short [MAX - 1]; // { dg-error "size of array" }
67 p = new short [MAX - 2]; // { dg-error "size of array" }
68 p = new short [MAX - 99]; // { dg-error "size of array" }
69 p = new short [MAX / 2]; // { dg-error "size of array" }
70 p = new short [MAX / 2 - 1]; // { dg-error "size of array" }
71 p = new short [MAX / 2 - 2]; // { dg-error "size of array" }
72 p = new short [MAX / 2 - 3]; // { dg-error "size of array" }
73 p = new short [MAX / 2 - 4]; // { dg-error "size of array" }
74 p = new short [MAX / 2 - 5]; // { dg-error "size of array" }
75 p = new short [MAX / 2 - 6]; // { dg-error "size of array" }
76 p = new short [MAX / 2 - 7]; // { dg-error "size of array" }
77 p = new short [MAX / 2 - 8]; // { dg-error "size of array" }
78 p = new short [MAX / 4]; // { dg-error "size of array" }
80 // Avoid exercising data model-dependent expressions.
81 // p = new short [MAX / 4 - 1];
83 p = new short [MAX / 4 - 4]; // okay
86 // Exercise new expression with two-dimensional arrays or char.
87 static void __attribute__ ((used))
88 test_two_dim_char_array ()
90 p = new char [1][MAX]; // { dg-error "size of (unnamed )?array" }
91 p = new char [1][MAX - 1]; // { dg-error "size of (unnamed )?array" }
92 p = new char [1][MAX - 2]; // { dg-error "size of (unnamed )?array" }
93 p = new char [1][MAX - 99]; // { dg-error "size of (unnamed )?array" }
94 p = new char [1][MAX / 2]; // { dg-error "size of array" }
95 p = new char [1][MAX / 2 - 1]; // { dg-error "size of array" }
96 p = new char [1][MAX / 2 - 2]; // { dg-error "size of array" }
98 // Avoid exercising data model-dependent expressions.
99 // p = new char [1][MAX / 2 - 3];
100 // p = new char [1][MAX / 2 - 4];
101 // p = new char [1][MAX / 2 - 5];
102 // p = new char [1][MAX / 2 - 6];
104 p = new char [1][MAX / 2 - 7]; // okay
105 p = new char [1][MAX / 2 - 8]; // okay
107 p = new char [2][MAX]; // { dg-error "size of (unnamed )?array" }
108 p = new char [2][MAX - 1]; // { dg-error "size of (unnamed )?array" }
109 p = new char [2][MAX - 2]; // { dg-error "size of (unnamed )?array" }
110 p = new char [2][MAX / 2]; // { dg-error "size of array" }
111 p = new char [2][MAX / 2 - 1]; // { dg-error "size of array" }
112 p = new char [2][MAX / 2 - 2]; // { dg-error "size of array" }
113 p = new char [2][MAX / 2 - 7]; // { dg-error "size of array" }
114 p = new char [2][MAX / 2 - 8]; // { dg-error "size of array" }
116 p = new char [MAX][MAX]; // { dg-error "size of (unnamed )?array" }
117 p = new char [MAX][MAX - 1]; // { dg-error "size of (unnamed )?array" }
118 p = new char [MAX][MAX - 2]; // { dg-error "size of (unnamed )?array" }
119 p = new char [MAX][MAX / 2]; // { dg-error "size of array" }
120 p = new char [MAX][MAX / 2 - 1]; // { dg-error "size of array" }
121 p = new char [MAX][MAX / 2 - 2]; // { dg-error "size of array" }
122 p = new char [MAX][MAX / 2 - 7]; // { dg-error "size of array" }
123 p = new char [MAX][MAX / 2 - 8]; // { dg-error "size of array" }
124 p = new char [MAX][2]; // { dg-error "size of array" }
125 p = new char [MAX][1]; // { dg-error "size of array" }
126 p = new char [MAX / 2][1]; // { dg-error "size of array" }
127 p = new char [MAX / 2 - 1][1]; // { dg-error "size of array" }
128 p = new char [MAX / 2 - 2][1]; // { dg-error "size of array" }
130 // Avoid exercising data model-dependent expressions.
131 // p = new char [MAX / 2 - 3][1];
132 // p = new char [MAX / 2 - 4][1];
133 // p = new char [MAX / 2 - 5][1];
134 // p = new char [MAX / 2 - 6][1];
136 p = new char [MAX / 2 - 7][1]; // okay
137 p = new char [MAX / 2 - 8][1]; // okay
141 // Exercise new expression with three-dimensional arrays.
142 static __attribute__ ((used)) void
143 test_three_dim_char_array ()
145 p = new char [1][1][MAX]; // { dg-error "size of (unnamed )?array" }
146 p = new char [1][1][MAX - 1]; // { dg-error "size of (unnamed )?array" }
147 p = new char [1][1][MAX - 2]; // { dg-error "size of (unnamed )?array" }
148 p = new char [1][1][MAX - 99]; // { dg-error "size of (unnamed )?array" }
149 p = new char [1][1][MAX / 2]; // { dg-error "size of array" }
150 p = new char [1][1][MAX / 2 - 1]; // { dg-error "size of array" }
151 p = new char [1][1][MAX / 2 - 2]; // { dg-error "size of array" }
153 // Avoid exercising data model-dependent expressions.
154 // p = new char [1][1][MAX / 2 - 3];
155 // p = new char [1][1][MAX / 2 - 4];
156 // p = new char [1][1][MAX / 2 - 5];
157 // p = new char [1][1][MAX / 2 - 6];
159 p = new char [1][1][MAX / 2 - 7]; // okay
160 p = new char [1][1][MAX / 2 - 8]; // okay
162 p = new char [1][2][MAX]; // { dg-error "size of (unnamed )?array" }
163 p = new char [1][2][MAX - 1]; // { dg-error "size of (unnamed )?array" }
164 p = new char [1][2][MAX - 2]; // { dg-error "size of (unnamed )?array" }
165 p = new char [1][2][MAX - 99]; // { dg-error "size of (unnamed )?array" }
166 p = new char [1][2][MAX / 2]; // { dg-error "size of (unnamed )?array" }
167 p = new char [1][2][MAX / 2 - 1]; // { dg-error "size of (unnamed )?array" }
168 p = new char [1][2][MAX / 2 - 2]; // { dg-error "size of (unnamed )?array" }
169 p = new char [1][2][MAX / 2 - 3]; // { dg-error "size of (unnamed )?array" }
170 p = new char [1][2][MAX / 2 - 4]; // { dg-error "size of (unnamed )?array" }
171 p = new char [1][2][MAX / 2 - 5]; // { dg-error "size of (unnamed )?array" }
172 p = new char [1][2][MAX / 2 - 6]; // { dg-error "size of (unnamed )?array" }
173 p = new char [1][2][MAX / 2 - 7]; // { dg-error "size of (unnamed )?array" }
174 p = new char [1][2][MAX / 2 - 8]; // { dg-error "size of (unnamed )?array" }
175 p = new char [1][2][MAX / 4]; // { dg-error "size of array" }
177 // Avoid exercising data model-dependent expressions.
178 // p = new char [1][2][MAX / 4 - 1];
179 // p = new char [1][2][MAX / 4 - 2];
181 p = new char [1][2][MAX / 4 - 3]; // okay
182 p = new char [1][2][MAX / 4 - 4]; // okay
184 p = new char [2][1][MAX]; // { dg-error "size of (unnamed )?array" }
185 p = new char [2][1][MAX - 1]; // { dg-error "size of (unnamed )?array" }
186 p = new char [2][1][MAX - 2]; // { dg-error "size of (unnamed )?array" }
187 p = new char [2][1][MAX - 99]; // { dg-error "size of (unnamed )?array" }
188 p = new char [2][1][MAX / 2]; // { dg-error "size of array" }
189 p = new char [2][1][MAX / 2 - 1]; // { dg-error "size of array" }
190 p = new char [2][1][MAX / 2 - 2]; // { dg-error "size of array" }
191 p = new char [2][1][MAX / 2 - 3]; // { dg-error "size of array" }
192 p = new char [2][1][MAX / 2 - 4]; // { dg-error "size of array" }
193 p = new char [2][1][MAX / 2 - 5]; // { dg-error "size of array" }
194 p = new char [2][1][MAX / 2 - 6]; // { dg-error "size of array" }
195 p = new char [2][1][MAX / 2 - 7]; // { dg-error "size of array" }
196 p = new char [2][1][MAX / 2 - 8]; // { dg-error "size of array" }
197 p = new char [2][1][MAX / 4]; // { dg-error "size of array" }
199 // Avoid exercising data model-dependent expressions.
200 // p = new char [2][1][MAX / 4 - 1];
201 // p = new char [2][1][MAX / 4 - 2];
203 p = new char [2][1][MAX / 4 - 3]; // okay
204 p = new char [2][1][MAX / 4 - 4]; // okay
206 p = new char [2][2][MAX]; // { dg-error "size of (unnamed )?array" }
207 p = new char [2][2][MAX - 1]; // { dg-error "size of (unnamed )?array" }
208 p = new char [2][2][MAX - 2]; // { dg-error "size of (unnamed )?array" }
209 p = new char [2][2][MAX - 99]; // { dg-error "size of (unnamed )?array" }
210 p = new char [2][2][MAX / 2]; // { dg-error "size of (unnamed )?array" }
211 p = new char [2][2][MAX / 2 - 1]; // { dg-error "size of (unnamed )?array" }
212 p = new char [2][2][MAX / 2 - 2]; // { dg-error "size of (unnamed )?array" }
213 p = new char [2][2][MAX / 2 - 3]; // { dg-error "size of (unnamed )?array" }
214 p = new char [2][2][MAX / 2 - 4]; // { dg-error "size of (unnamed )?array" }
215 p = new char [2][2][MAX / 2 - 5]; // { dg-error "size of (unnamed )?array" }
216 p = new char [2][2][MAX / 2 - 6]; // { dg-error "size of (unnamed )?array" }
217 p = new char [2][2][MAX / 2 - 7]; // { dg-error "size of (unnamed )?array" }
218 p = new char [2][2][MAX / 2 - 8]; // { dg-error "size of (unnamed )?array" }
219 p = new char [2][2][MAX / 4]; // { dg-error "size of array" }
220 p = new char [2][2][MAX / 4 - 1]; // { dg-error "size of array" }
221 p = new char [2][2][MAX / 4 - 2]; // { dg-error "size of array" }
223 // Avoid exercising data model-dependent expressions.
224 // p = new char [2][2][MAX / 8];
225 // p = new char [2][2][MAX / 8 - 1];
227 p = new char [2][2][MAX / 8 - 2];
228 p = new char [2][2][MAX / 8 - 3];
230 p = new char [2][MAX][2]; // { dg-error "size of (unnamed )?array" }
231 p = new char [2][MAX - 1][2]; // { dg-error "size of (unnamed )?array" }
232 p = new char [2][MAX - 2][2]; // { dg-error "size of (unnamed )?array" }
233 p = new char [2][MAX - 99][2]; // { dg-error "size of (unnamed )?array" }
234 p = new char [2][MAX / 2][2]; // { dg-error "size of (unnamed )?array" }
235 p = new char [2][MAX / 2 - 1][2]; // { dg-error "size of (unnamed )?array" }
236 p = new char [2][MAX / 2 - 2][2]; // { dg-error "size of (unnamed )?array" }
237 p = new char [2][MAX / 2 - 3][2]; // { dg-error "size of (unnamed )?array" }
238 p = new char [2][MAX / 2 - 4][2]; // { dg-error "size of (unnamed )?array" }
239 p = new char [2][MAX / 2 - 5][2]; // { dg-error "size of (unnamed )?array" }
240 p = new char [2][MAX / 2 - 6][2]; // { dg-error "size of (unnamed )?array" }
241 p = new char [2][MAX / 2 - 7][2]; // { dg-error "size of (unnamed )?array" }
242 p = new char [2][MAX / 2 - 8][2]; // { dg-error "size of (unnamed )?array" }
243 p = new char [2][MAX / 4][2]; // { dg-error "size of array" }
244 p = new char [2][MAX / 4 - 1][2]; // { dg-error "size of array" }
245 p = new char [2][MAX / 4 - 2][2]; // { dg-error "size of array" }
247 // Avoid exercising data model-dependent expressions.
248 // p = new char [2][MAX / 8][2];
249 // p = new char [2][MAX / 8 - 1][2];
251 p = new char [2][MAX / 8 - 2][2];
252 p = new char [2][MAX / 8 - 3][2];
254 p = new char [MAX][2][2]; // { dg-error "size of array" }
255 p = new char [MAX - 1][2][2]; // { dg-error "size of array" }
256 p = new char [MAX - 2][2][2]; // { dg-error "size of array" }
257 p = new char [MAX - 99][2][2]; // { dg-error "size of array" }
258 p = new char [MAX / 2][2][2]; // { dg-error "size of array" }
259 p = new char [MAX / 2 - 1][2][2]; // { dg-error "size of array" }
260 p = new char [MAX / 2 - 2][2][2]; // { dg-error "size of array" }
261 p = new char [MAX / 2 - 3][2][2]; // { dg-error "size of array" }
262 p = new char [MAX / 2 - 4][2][2]; // { dg-error "size of array" }
263 p = new char [MAX / 2 - 5][2][2]; // { dg-error "size of array" }
264 p = new char [MAX / 2 - 6][2][2]; // { dg-error "size of array" }
265 p = new char [MAX / 2 - 7][2][2]; // { dg-error "size of array" }
266 p = new char [MAX / 2 - 8][2][2]; // { dg-error "size of array" }
267 p = new char [MAX / 4][2][2]; // { dg-error "size of array" }
268 p = new char [MAX / 4 - 1][2][2]; // { dg-error "size of array" }
269 p = new char [MAX / 4 - 2][2][2]; // { dg-error "size of array" }
271 // Avoid exercising data model-dependent expressions.
272 // p = new char [MAX / 8][2][2];
273 // p = new char [MAX / 8 - 1][2][2];
275 p = new char [MAX / 8 - 2][2][2];
276 p = new char [MAX / 8 - 3][2][2];
278 p = new char [MAX][MAX][MAX]; // { dg-error "size of (unnamed )?array" }
279 p = new char [MAX][MAX][MAX / 2]; // { dg-error "size of (unnamed )?array" }
280 p = new char [MAX][MAX / 2][MAX]; // { dg-error "size of (unnamed )?array" }
281 p = new char [MAX][MAX / 2][MAX / 2]; // { dg-error "size of (unnamed )?array" }
282 p = new char [MAX / 2][MAX / 2][MAX / 2]; // { dg-error "size of (unnamed )?array" }
285 // Exercise new expression with N-dimensional arrays where N is
287 static __attribute__ ((used)) void
288 test_N_dim_char_array ()
290 #if __SIZEOF_SIZE_T__ == 8
296 p = new char [N][N][N][N][N][N][N];
297 p = new char [N / 2][2][N][N][N][N][N][N];
298 p = new char [N - 1][N / 2][N][N][N][N][N][N];
299 p = new char [N / 2][N][N][N][N][N][N][N]; // { dg-error "size of array" }
300 p = new char [N - 1][N][N][N][N][N][N][N]; // { dg-error "size of array" }
301 p = new char [N] [N][N][N][N][N][N][N]; // { dg-error "size of array" }
304 typedef struct Byte {
307 void* operator new (size_t, void*);
308 void* operator new[] (size_t, void*);
311 void* operator new (size_t, B*);
312 void* operator new[] (size_t, B*);
314 // Exercise placement new expression with one-dimensional arrays of a struct.
315 static void __attribute__ ((used))
316 test_one_dim_byte_array (void *p)
318 p = new (p) B [MAX]; // { dg-error "size of array" }
319 p = new (p) B [MAX - 1]; // { dg-error "size of array" }
320 p = new (p) B [MAX - 2]; // { dg-error "size of array" }
321 p = new (p) B [MAX - 99]; // { dg-error "size of array" }
322 p = new (p) B [MAX / 2]; // { dg-error "size of array" }
323 p = new (p) B [MAX / 2 - 1]; // { dg-error "size of array" }
324 p = new (p) B [MAX / 2 - 2]; // { dg-error "size of array" }
326 // Avoid testing the expressions below since whether or not they
327 // are accepted depends on the precision of size_t (which determines
328 // the size of the cookie).
329 // p = new (p) B [MAX / 2 - 3];
330 // p = new (p) B [MAX / 2 - 4];
331 // p = new (p) B [MAX / 2 - 5];
332 // p = new (p) B [MAX / 2 - 6];
334 // The following expressions are accepted on ILP32 as well LP64
335 // (they will be diagnosed on LP128 if there ever is such a data
337 p = new (p) B [MAX / 2 - 7]; // okay
338 p = new (p) B [MAX / 2 - 8]; // okay
341 // Exercise placement new expression with two-dimensional arrays.
342 static void __attribute__ ((used))
343 test_placement_two_dim_byte_struct_array (void *p)
345 p = new (p) B [1][MAX]; // { dg-error "size of (unnamed )?array" }
346 p = new (p) B [1][MAX - 1]; // { dg-error "size of (unnamed )?array" }
347 p = new (p) B [1][MAX - 2]; // { dg-error "size of (unnamed )?array" }
348 p = new (p) B [1][MAX - 99]; // { dg-error "size of (unnamed )?array" }
349 p = new (p) B [1][MAX / 2]; // { dg-error "size of array" }
350 p = new (p) B [1][MAX / 2 - 1]; // { dg-error "size of array" }
351 p = new (p) B [1][MAX / 2 - 2]; // { dg-error "size of array" }
353 // Avoid exercising data model-dependent expressions.
354 // p = new (p) B [1][MAX / 2 - 3];
355 // p = new (p) B [1][MAX / 2 - 4];
356 // p = new (p) B [1][MAX / 2 - 5];
357 // p = new (p) B [1][MAX / 2 - 6];
359 p = new (p) B [1][MAX / 2 - 7]; // okay
360 p = new (p) B [1][MAX / 2 - 8]; // okay
362 p = new (p) B [2][MAX]; // { dg-error "size of (unnamed )?array" }
363 p = new (p) B [2][MAX - 1]; // { dg-error "size of (unnamed )?array" }
364 p = new (p) B [2][MAX - 2]; // { dg-error "size of (unnamed )?array" }
365 p = new (p) B [2][MAX / 2]; // { dg-error "size of array" }
366 p = new (p) B [2][MAX / 2 - 1]; // { dg-error "size of array" }
367 p = new (p) B [2][MAX / 2 - 2]; // { dg-error "size of array" }
368 p = new (p) B [2][MAX / 2 - 7]; // { dg-error "size of array" }
369 p = new (p) B [2][MAX / 2 - 8]; // { dg-error "size of array" }
371 p = new (p) B [MAX][MAX]; // { dg-error "size of (unnamed )?array" }
372 p = new (p) B [MAX][MAX - 1]; // { dg-error "size of (unnamed )?array" }
373 p = new (p) B [MAX][MAX - 2]; // { dg-error "size of (unnamed )?array" }
374 p = new (p) B [MAX][MAX / 2]; // { dg-error "size of array" }
375 p = new (p) B [MAX][MAX / 2 - 1]; // { dg-error "size of array" }
376 p = new (p) B [MAX][MAX / 2 - 2]; // { dg-error "size of array" }
377 p = new (p) B [MAX][MAX / 2 - 7]; // { dg-error "size of array" }
378 p = new (p) B [MAX][MAX / 2 - 8]; // { dg-error "size of array" }
379 p = new (p) B [MAX][2]; // { dg-error "size of array" }
380 p = new (p) B [MAX][1]; // { dg-error "size of array" }
381 p = new (p) B [MAX / 2][1]; // { dg-error "size of array" }
382 p = new (p) B [MAX / 2 - 1][1]; // { dg-error "size of array" }
383 p = new (p) B [MAX / 2 - 2][1]; // { dg-error "size of array" }
385 // Avoid exercising data model-dependent expressions.
386 // p = new (p) B [MAX / 2 - 3][1];
387 // p = new (p) B [MAX / 2 - 4][1];
388 // p = new (p) B [MAX / 2 - 5][1];
389 // p = new (p) B [MAX / 2 - 6][1];
391 p = new (p) B [MAX / 2 - 7][1]; // okay
392 p = new (p) B [MAX / 2 - 8][1]; // okay
396 // Exercise placement new expression with three-dimensional arrays.
397 static __attribute__ ((used)) void
398 test_placement_three_dim_byte_struct_array (void *p)
400 p = new (p) B [1][1][MAX]; // { dg-error "size of (unnamed )?array" }
401 p = new (p) B [1][1][MAX - 1]; // { dg-error "size of (unnamed )?array" }
402 p = new (p) B [1][1][MAX - 2]; // { dg-error "size of (unnamed )?array" }
403 p = new (p) B [1][1][MAX - 99]; // { dg-error "size of (unnamed )?array" }
404 p = new (p) B [1][1][MAX / 2]; // { dg-error "size of array" }
405 p = new (p) B [1][1][MAX / 2 - 1]; // { dg-error "size of array" }
406 p = new (p) B [1][1][MAX / 2 - 2]; // { dg-error "size of array" }
408 // Avoid exercising data model-dependent expressions.
409 // p = new (p) B [1][1][MAX / 2 - 3];
410 // p = new (p) B [1][1][MAX / 2 - 4];
411 // p = new (p) B [1][1][MAX / 2 - 5];
412 // p = new (p) B [1][1][MAX / 2 - 6];
414 p = new (p) B [1][1][MAX / 2 - 7]; // okay
415 p = new (p) B [1][1][MAX / 2 - 8]; // okay
417 p = new (p) B [1][2][MAX]; // { dg-error "size of (unnamed )?array" }
418 p = new (p) B [1][2][MAX - 1]; // { dg-error "size of (unnamed )?array" }
419 p = new (p) B [1][2][MAX - 2]; // { dg-error "size of (unnamed )?array" }
420 p = new (p) B [1][2][MAX - 99]; // { dg-error "size of (unnamed )?array" }
421 p = new (p) B [1][2][MAX / 2]; // { dg-error "size of (unnamed )?array" }
422 p = new (p) B [1][2][MAX / 2 - 1]; // { dg-error "size of (unnamed )?array" }
423 p = new (p) B [1][2][MAX / 2 - 2]; // { dg-error "size of (unnamed )?array" }
424 p = new (p) B [1][2][MAX / 2 - 3]; // { dg-error "size of (unnamed )?array" }
425 p = new (p) B [1][2][MAX / 2 - 4]; // { dg-error "size of (unnamed )?array" }
426 p = new (p) B [1][2][MAX / 2 - 5]; // { dg-error "size of (unnamed )?array" }
427 p = new (p) B [1][2][MAX / 2 - 6]; // { dg-error "size of (unnamed )?array" }
428 p = new (p) B [1][2][MAX / 2 - 7]; // { dg-error "size of (unnamed )?array" }
429 p = new (p) B [1][2][MAX / 2 - 8]; // { dg-error "size of (unnamed )?array" }
430 p = new (p) B [1][2][MAX / 4]; // { dg-error "size of array" }
432 // Avoid exercising data model-dependent expressions.
433 // p = new (p) B [1][2][MAX / 4 - 1];
434 // p = new (p) B [1][2][MAX / 4 - 2];
436 p = new (p) B [1][2][MAX / 4 - 3]; // okay
437 p = new (p) B [1][2][MAX / 4 - 4]; // okay
439 p = new (p) B [2][1][MAX]; // { dg-error "size of (unnamed )?array" }
440 p = new (p) B [2][1][MAX - 1]; // { dg-error "size of (unnamed )?array" }
441 p = new (p) B [2][1][MAX - 2]; // { dg-error "size of (unnamed )?array" }
442 p = new (p) B [2][1][MAX - 99]; // { dg-error "size of (unnamed )?array" }
443 p = new (p) B [2][1][MAX / 2]; // { dg-error "size of array" }
444 p = new (p) B [2][1][MAX / 2 - 1]; // { dg-error "size of array" }
445 p = new (p) B [2][1][MAX / 2 - 2]; // { dg-error "size of array" }
446 p = new (p) B [2][1][MAX / 2 - 3]; // { dg-error "size of array" }
447 p = new (p) B [2][1][MAX / 2 - 4]; // { dg-error "size of array" }
448 p = new (p) B [2][1][MAX / 2 - 5]; // { dg-error "size of array" }
449 p = new (p) B [2][1][MAX / 2 - 6]; // { dg-error "size of array" }
450 p = new (p) B [2][1][MAX / 2 - 7]; // { dg-error "size of array" }
451 p = new (p) B [2][1][MAX / 2 - 8]; // { dg-error "size of array" }
452 p = new (p) B [2][1][MAX / 4]; // { dg-error "size of array" }
454 // Avoid exercising data model-dependent expressions.
455 // p = new (p) B [2][1][MAX / 4 - 1];
456 // p = new (p) B [2][1][MAX / 4 - 2];
458 p = new (p) B [2][1][MAX / 4 - 3]; // okay
459 p = new (p) B [2][1][MAX / 4 - 4]; // okay
461 p = new (p) B [2][2][MAX]; // { dg-error "size of (unnamed )?array" }
462 p = new (p) B [2][2][MAX - 1]; // { dg-error "size of (unnamed )?array" }
463 p = new (p) B [2][2][MAX - 2]; // { dg-error "size of (unnamed )?array" }
464 p = new (p) B [2][2][MAX - 99]; // { dg-error "size of (unnamed )?array" }
465 p = new (p) B [2][2][MAX / 2]; // { dg-error "size of (unnamed )?array" }
466 p = new (p) B [2][2][MAX / 2 - 1]; // { dg-error "size of (unnamed )?array" }
467 p = new (p) B [2][2][MAX / 2 - 2]; // { dg-error "size of (unnamed )?array" }
468 p = new (p) B [2][2][MAX / 2 - 3]; // { dg-error "size of (unnamed )?array" }
469 p = new (p) B [2][2][MAX / 2 - 4]; // { dg-error "size of (unnamed )?array" }
470 p = new (p) B [2][2][MAX / 2 - 5]; // { dg-error "size of (unnamed )?array" }
471 p = new (p) B [2][2][MAX / 2 - 6]; // { dg-error "size of (unnamed )?array" }
472 p = new (p) B [2][2][MAX / 2 - 7]; // { dg-error "size of (unnamed )?array" }
473 p = new (p) B [2][2][MAX / 2 - 8]; // { dg-error "size of (unnamed )?array" }
474 p = new (p) B [2][2][MAX / 4]; // { dg-error "size of array" }
475 p = new (p) B [2][2][MAX / 4 - 1]; // { dg-error "size of array" }
476 p = new (p) B [2][2][MAX / 4 - 2]; // { dg-error "size of array" }
478 // Avoid exercising data model-dependent expressions.
479 // p = new (p) B [2][2][MAX / 8];
480 // p = new (p) B [2][2][MAX / 8 - 1];
482 p = new (p) B [2][2][MAX / 8 - 2];
483 p = new (p) B [2][2][MAX / 8 - 3];
485 p = new (p) B [2][MAX][2]; // { dg-error "size of (unnamed )?array" }
486 p = new (p) B [2][MAX - 1][2]; // { dg-error "size of (unnamed )?array" }
487 p = new (p) B [2][MAX - 2][2]; // { dg-error "size of (unnamed )?array" }
488 p = new (p) B [2][MAX - 99][2]; // { dg-error "size of (unnamed )?array" }
489 p = new (p) B [2][MAX / 2][2]; // { dg-error "size of (unnamed )?array" }
490 p = new (p) B [2][MAX / 2 - 1][2]; // { dg-error "size of (unnamed )?array" }
491 p = new (p) B [2][MAX / 2 - 2][2]; // { dg-error "size of (unnamed )?array" }
492 p = new (p) B [2][MAX / 2 - 3][2]; // { dg-error "size of (unnamed )?array" }
493 p = new (p) B [2][MAX / 2 - 4][2]; // { dg-error "size of (unnamed )?array" }
494 p = new (p) B [2][MAX / 2 - 5][2]; // { dg-error "size of (unnamed )?array" }
495 p = new (p) B [2][MAX / 2 - 6][2]; // { dg-error "size of (unnamed )?array" }
496 p = new (p) B [2][MAX / 2 - 7][2]; // { dg-error "size of (unnamed )?array" }
497 p = new (p) B [2][MAX / 2 - 8][2]; // { dg-error "size of (unnamed )?array" }
498 p = new (p) B [2][MAX / 4][2]; // { dg-error "size of array" }
499 p = new (p) B [2][MAX / 4 - 1][2]; // { dg-error "size of array" }
500 p = new (p) B [2][MAX / 4 - 2][2]; // { dg-error "size of array" }
502 // Avoid exercising data model-dependent expressions.
503 // p = new (p) B [2][MAX / 8][2];
504 // p = new (p) B [2][MAX / 8 - 1][2];
506 p = new (p) B [2][MAX / 8 - 2][2];
507 p = new (p) B [2][MAX / 8 - 3][2];
509 p = new (p) B [MAX][2][2]; // { dg-error "size of array" }
510 p = new (p) B [MAX - 1][2][2]; // { dg-error "size of array" }
511 p = new (p) B [MAX - 2][2][2]; // { dg-error "size of array" }
512 p = new (p) B [MAX - 99][2][2]; // { dg-error "size of array" }
513 p = new (p) B [MAX / 2][2][2]; // { dg-error "size of array" }
514 p = new (p) B [MAX / 2 - 1][2][2]; // { dg-error "size of array" }
515 p = new (p) B [MAX / 2 - 2][2][2]; // { dg-error "size of array" }
516 p = new (p) B [MAX / 2 - 3][2][2]; // { dg-error "size of array" }
517 p = new (p) B [MAX / 2 - 4][2][2]; // { dg-error "size of array" }
518 p = new (p) B [MAX / 2 - 5][2][2]; // { dg-error "size of array" }
519 p = new (p) B [MAX / 2 - 6][2][2]; // { dg-error "size of array" }
520 p = new (p) B [MAX / 2 - 7][2][2]; // { dg-error "size of array" }
521 p = new (p) B [MAX / 2 - 8][2][2]; // { dg-error "size of array" }
522 p = new (p) B [MAX / 4][2][2]; // { dg-error "size of array" }
523 p = new (p) B [MAX / 4 - 1][2][2]; // { dg-error "size of array" }
524 p = new (p) B [MAX / 4 - 2][2][2]; // { dg-error "size of array" }
526 // Avoid exercising data model-dependent expressions.
527 // p = new (p) B [MAX / 8][2][2];
528 // p = new (p) B [MAX / 8 - 1][2][2];
530 p = new (p) B [MAX / 8 - 2][2][2];
531 p = new (p) B [MAX / 8 - 3][2][2];