1 /* { dg-do run } */
2 /* { dg-options "-O2" } */
3
4 #include "builtin-object-size-common.h"
5
6 struct A
7 {
8 int i, j, k;
9 char buf[255];
10 int l, m, n, o;
11 };
12
13 int
14 main (void)
15 {
16 const size_t s = sizeof (struct A);
17 const size_t o = __builtin_offsetof (struct A, buf);
18 struct A *a = malloc (s);
19 struct A *b = malloc (o + 212);
20 if (__builtin_object_size (a->buf, 0) != s - o)
21 FAIL ();
22 if (__builtin_object_size (a->buf, 1) != sizeof (a->buf))
23 FAIL ();
24 if (__builtin_object_size (a->buf, 2) != s - o)
25 FAIL ();
26 if (__builtin_object_size (a->buf, 3) != sizeof (a->buf))
27 FAIL ();
28 if (__builtin_object_size (&a->buf[0], 0) != s - o)
29 FAIL ();
30 if (__builtin_object_size (&a->buf[0], 1) != sizeof (a->buf))
31 FAIL ();
32 if (__builtin_object_size (&a->buf[0], 2) != s - o)
33 FAIL ();
34 if (__builtin_object_size (&a->buf[0], 3) != sizeof (a->buf))
35 FAIL ();
36 if (__builtin_object_size (&a->buf[6], 0) != s - o - 6)
37 FAIL ();
38 if (__builtin_object_size (&a->buf[6], 1) != sizeof (a->buf) - 6)
39 FAIL ();
40 if (__builtin_object_size (&a->buf[6], 2) != s - o - 6)
41 FAIL ();
42 if (__builtin_object_size (&a->buf[6], 3) != sizeof (a->buf) - 6)
43 FAIL ();
44 if (__builtin_object_size (b->buf, 0) != 212)
45 FAIL ();
46 if (__builtin_object_size (b->buf, 1) != 212)
47 FAIL ();
48 if (__builtin_object_size (b->buf, 2) != 212)
49 FAIL ();
50 if (__builtin_object_size (b->buf, 3) != 212)
51 FAIL ();
52 if (__builtin_object_size (&b->buf[0], 0) != 212)
53 FAIL ();
54 if (__builtin_object_size (&b->buf[0], 1) != 212)
55 FAIL ();
56 if (__builtin_object_size (&b->buf[0], 2) != 212)
57 FAIL ();
58 if (__builtin_object_size (&b->buf[0], 3) != 212)
59 FAIL ();
60 if (__builtin_object_size (&b->buf[28], 0) != 212 - 28)
61 FAIL ();
62 if (__builtin_object_size (&b->buf[28], 1) != 212 - 28)
63 FAIL ();
64 if (__builtin_object_size (&b->buf[28], 2) != 212 - 28)
65 FAIL ();
66 if (__builtin_object_size (&b->buf[28], 3) != 212 - 28)
67 FAIL ();
68 DONE ();
69 }