2 /* { dg-options "-O2" } */
4 #include "builtin-object-size-common.h"
14 __attribute__ ((noinline
))
18 if (__builtin_object_size (&p
->a
, 0) != (size_t) -1)
20 if (__builtin_object_size (&p
->a
[0], 0) != (size_t) -1)
22 if (__builtin_object_size (&p
->a
[3], 0) != (size_t) -1)
24 if (__builtin_object_size (&p
->b
, 0) != (size_t) -1)
26 if (__builtin_object_size (&p
->c
, 0) != (size_t) -1)
29 if (__builtin_object_size (c
, 0) != (size_t) -1)
32 if (__builtin_object_size (c
, 0) != (size_t) -1)
35 if (__builtin_object_size (c
, 0) != (size_t) -1)
38 if (__builtin_object_size (c
, 0) != (size_t) -1)
41 if (__builtin_object_size (c
, 0) != (size_t) -1)
43 if (__builtin_object_size (&p
->a
, 1) != sizeof (p
->a
))
45 if (__builtin_object_size (&p
->a
[0], 1) != sizeof (p
->a
))
47 if (__builtin_object_size (&p
->a
[3], 1) != sizeof (p
->a
) - 3)
49 if (__builtin_object_size (&p
->b
, 1) != sizeof (p
->b
))
51 if (__builtin_object_size (&p
->c
, 1) != (size_t) -1)
54 if (__builtin_object_size (c
, 1) != sizeof (p
->a
))
57 if (__builtin_object_size (c
, 1) != sizeof (p
->a
))
60 if (__builtin_object_size (c
, 1) != sizeof (p
->a
) - 3)
63 if (__builtin_object_size (c
, 1) != sizeof (p
->b
))
66 if (__builtin_object_size (c
, 1) != (size_t) -1)
68 if (__builtin_object_size (&p
->a
, 2) != 0)
70 if (__builtin_object_size (&p
->a
[0], 2) != 0)
72 if (__builtin_object_size (&p
->a
[3], 2) != 0)
74 if (__builtin_object_size (&p
->b
, 2) != 0)
76 if (__builtin_object_size (&p
->c
, 2) != 0)
79 if (__builtin_object_size (c
, 2) != 0)
82 if (__builtin_object_size (c
, 2) != 0)
85 if (__builtin_object_size (c
, 2) != 0)
88 if (__builtin_object_size (c
, 2) != 0)
91 if (__builtin_object_size (c
, 2) != 0)
93 if (__builtin_object_size (&p
->a
, 3) != sizeof (p
->a
))
95 if (__builtin_object_size (&p
->a
[0], 3) != sizeof (p
->a
))
97 if (__builtin_object_size (&p
->a
[3], 3) != sizeof (p
->a
) - 3)
99 if (__builtin_object_size (&p
->b
, 3) != sizeof (p
->b
))
101 if (__builtin_object_size (&p
->c
, 3) != 0)
104 if (__builtin_object_size (c
, 3) != sizeof (p
->a
))
107 if (__builtin_object_size (c
, 3) != sizeof (p
->a
))
110 if (__builtin_object_size (c
, 3) != sizeof (p
->a
) - 3)
113 if (__builtin_object_size (c
, 3) != sizeof (p
->b
))
116 if (__builtin_object_size (c
, 3) != 0)
121 __attribute__ ((noinline
))
125 size_t s
= 2 * sizeof (struct A
);
126 struct A
*p
= malloc (2 * sizeof (struct A
));
127 if (__builtin_object_size (&p
->a
, 0) != s
)
129 if (__builtin_object_size (&p
->a
[0], 0) != s
)
131 if (__builtin_object_size (&p
->a
[3], 0) != s
- 3)
133 if (__builtin_object_size (&p
->b
, 0) != s
- __builtin_offsetof (struct A
, b
))
135 if (__builtin_object_size (&p
->c
, 0) != s
- __builtin_offsetof (struct A
, c
))
138 if (__builtin_object_size (c
, 0) != s
)
141 if (__builtin_object_size (c
, 0) != s
)
144 if (__builtin_object_size (c
, 0) != s
- 3)
147 if (__builtin_object_size (c
, 0) != s
- __builtin_offsetof (struct A
, b
))
150 if (__builtin_object_size (c
, 0) != s
- __builtin_offsetof (struct A
, c
))
152 if (__builtin_object_size (&p
->a
, 1) != sizeof (p
->a
))
154 if (__builtin_object_size (&p
->a
[0], 1) != sizeof (p
->a
))
156 if (__builtin_object_size (&p
->a
[3], 1) != sizeof (p
->a
) - 3)
158 if (__builtin_object_size (&p
->b
, 1) != sizeof (p
->b
))
160 if (__builtin_object_size (&p
->c
, 1) != s
- __builtin_offsetof (struct A
, c
))
163 if (__builtin_object_size (c
, 1) != sizeof (p
->a
))
166 if (__builtin_object_size (c
, 1) != sizeof (p
->a
))
169 if (__builtin_object_size (c
, 1) != sizeof (p
->a
) - 3)
172 if (__builtin_object_size (c
, 1) != sizeof (p
->b
))
175 if (__builtin_object_size (c
, 1) != s
- __builtin_offsetof (struct A
, c
))
177 if (__builtin_object_size (&p
->a
, 2) != s
)
179 if (__builtin_object_size (&p
->a
[0], 2) != s
)
181 if (__builtin_object_size (&p
->a
[3], 2) != s
- 3)
183 if (__builtin_object_size (&p
->b
, 2) != s
- __builtin_offsetof (struct A
, b
))
185 if (__builtin_object_size (&p
->c
, 2) != s
- __builtin_offsetof (struct A
, c
))
188 if (__builtin_object_size (c
, 2) != s
)
191 if (__builtin_object_size (c
, 2) != s
)
194 if (__builtin_object_size (c
, 2) != s
- 3)
197 if (__builtin_object_size (c
, 2) != s
- __builtin_offsetof (struct A
, b
))
200 if (__builtin_object_size (c
, 2) != s
- __builtin_offsetof (struct A
, c
))
202 if (__builtin_object_size (&p
->a
, 3) != sizeof (p
->a
))
204 if (__builtin_object_size (&p
->a
[0], 3) != sizeof (p
->a
))
206 if (__builtin_object_size (&p
->a
[3], 3) != sizeof (p
->a
) - 3)
208 if (__builtin_object_size (&p
->b
, 3) != sizeof (p
->b
))
210 if (__builtin_object_size (&p
->c
, 3) != s
- __builtin_offsetof (struct A
, c
))
213 if (__builtin_object_size (c
, 3) != sizeof (p
->a
))
216 if (__builtin_object_size (c
, 3) != sizeof (p
->a
))
219 if (__builtin_object_size (c
, 3) != sizeof (p
->a
) - 3)
222 if (__builtin_object_size (c
, 3) != sizeof (p
->b
))
225 if (__builtin_object_size (c
, 3) != s
- __builtin_offsetof (struct A
, c
))
231 __attribute__ ((noinline
))
236 struct A
*p
= malloc (4);
237 if (__builtin_object_size (&p
->a
, 0) != 4)
239 if (__builtin_object_size (&p
->a
[0], 0) != 4)
241 if (__builtin_object_size (&p
->a
[3], 0) != 1)
243 if (__builtin_object_size (&p
->b
, 0) != 0)
245 if (__builtin_object_size (&p
->c
, 0) != 0)
247 if (__builtin_object_size (&p
->a
, 1) != 4)
249 if (__builtin_object_size (&p
->a
[0], 1) != 4)
251 if (__builtin_object_size (&p
->a
[3], 1) != 1)
253 if (__builtin_object_size (&p
->b
, 1) != 0)
255 if (__builtin_object_size (&p
->c
, 1) != 0)
258 s
= __builtin_offsetof (struct A
, c
) + 4;
260 if (__builtin_object_size (&p
->a
, 0) != s
)
262 if (__builtin_object_size (&p
->a
[0], 0) != s
)
264 if (__builtin_object_size (&p
->a
[3], 0) != s
- 3)
266 if (__builtin_object_size (&p
->b
, 0) != s
- __builtin_offsetof (struct A
, b
))
268 if (__builtin_object_size (&p
->c
, 0) != 4)
270 if (__builtin_object_size (&p
->a
, 1) != sizeof (p
->a
))
272 if (__builtin_object_size (&p
->a
[0], 1) != sizeof (p
->a
))
274 if (__builtin_object_size (&p
->a
[3], 1) != sizeof (p
->a
) - 3)
276 if (__builtin_object_size (&p
->b
, 1) != sizeof (p
->b
))
278 if (__builtin_object_size (&p
->c
, 1) != 4)
289 __attribute__ ((noinline
))
290 test4 (struct B
*q
, int i
)
292 if (__builtin_object_size (&q
->a
[2].a
[2], 1) != sizeof (q
->a
[0].a
) - 2)
294 if (__builtin_object_size (&q
->a
[2].c
[2], 1) != sizeof (q
->a
[0].c
) - 2)
296 if (__builtin_object_size (&q
->a
[3].a
[2], 1) != sizeof (q
->a
[0].a
) - 2)
298 if (__builtin_object_size (&q
->a
[3].c
[2], 1) != sizeof (q
->a
[0].c
) - 2)
300 if (__builtin_object_size (&q
->a
[i
].a
[2], 1) != sizeof (q
->a
[0].a
) - 2)
302 if (__builtin_object_size (&q
->a
[i
].c
[2], 1) != sizeof (q
->a
[0].c
) - 2)
313 __attribute__ ((noinline
))
316 if (__builtin_object_size (&c
->b
, 0) != (size_t) -1)
318 if (__builtin_object_size (&c
->b
, 1) != 1)
320 if (__builtin_object_size (&c
->b
, 2) != 0)
322 if (__builtin_object_size (&c
->b
, 3) != 1)
337 __attribute__ ((noinline
))
340 if (__builtin_object_size (&d
->j
.a
[3], 0) != (size_t) -1)
342 if (__builtin_object_size (&d
->j
.a
[3], 1) != sizeof (d
->j
.a
) - 3)
344 if (__builtin_object_size (&d
->j
.a
[3], 2) != 0)
346 if (__builtin_object_size (&d
->j
.a
[3], 3) != sizeof (d
->j
.a
) - 3)
361 __attribute__ ((noinline
))
364 if (__builtin_object_size (&e
->j
[0].a
[3], 0) != (size_t) -1)
366 if (__builtin_object_size (&e
->j
[0].a
[3], 1) != sizeof (e
->j
[0].a
) - 3)
368 if (__builtin_object_size (&e
->j
[0].a
[3], 2) != 0)
370 if (__builtin_object_size (&e
->j
[0].a
[3], 3) != sizeof (e
->j
[0].a
) - 3)
372 if (__builtin_object_size ((char *) &e
->j
[0], 0) != (size_t) -1)
374 if (__builtin_object_size ((char *) &e
->j
[0], 1) != (size_t) -1)
376 if (__builtin_object_size ((char *) &e
->j
[0], 2) != 0)
378 if (__builtin_object_size ((char *) &e
->j
[0], 3) != 0)
393 __attribute__ ((noinline
))
396 if (__builtin_object_size (&f
->d
.c
[3], 0) != (size_t) -1)
398 if (__builtin_object_size (&f
->d
.c
[3], 1) != (size_t) -1)
400 if (__builtin_object_size (&f
->d
.c
[3], 2) != 0)
402 if (__builtin_object_size (&f
->d
.c
[3], 3) != 0)
411 __asm ("" : "+r" (p
));
416 __asm ("" : "+r" (q
), "+r" (i
));
418 struct C c
, *cp
= &c
;
419 __asm ("" : "+r" (cp
));
421 struct D d
, *dp
= &d
;
422 __asm ("" : "+r" (dp
));
424 struct E e
, *ep
= &e
;
425 __asm ("" : "+r" (ep
));
428 __asm ("" : "+r" (fp
));