PR middle-end/85602 - -Wsizeof-pointer-memaccess for strncat with size of source
[official-gcc.git] / gcc / testsuite / gcc.dg / builtin-object-size-7.c
blob41742b974ef1ce0daa8aea21c38ca4f175d9a790
1 /* { dg-do run } */
2 /* { dg-options "-O2" } */
4 typedef __SIZE_TYPE__ size_t;
5 extern void *malloc (size_t);
6 extern void abort (void);
8 struct A
10 int i, j, k;
11 char buf[255];
12 int l, m, n, o;
15 int
16 main (void)
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;