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