OSDN Git Service

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