]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.dg/pr101419.c
Update copyright years.
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / pr101419.c
1 /* PR tree-optimization/101419 */
2 /* { dg-do compile } */
3 /* { dg-options "-O2" } */
4
5 typedef __SIZE_TYPE__ size_t;
6 void baz (int, int) __attribute__((__warning__("detected overflow")));
7
8 union U {
9 int i;
10 char c;
11 };
12
13 static void
14 foo (union U *u)
15 {
16 if (__builtin_object_size (&u->c, 1) < sizeof (u->c))
17 baz (__builtin_object_size (&u->c, 1), sizeof (u->c)); /* { dg-bogus "detected overflow" } */
18 __builtin_memset (&u->c, 0, sizeof (u->c));
19
20 if (__builtin_object_size (&u->i, 1) < sizeof (u->i))
21 baz (__builtin_object_size (&u->i, 1), sizeof (u->i)); /* { dg-bogus "detected overflow" } */
22 __builtin_memset (&u->i, 0, sizeof (u->i));
23 }
24
25 void
26 bar (union U *u)
27 {
28 int i, j;
29 for (i = 0; i < 1; i++)
30 {
31 foo (u);
32 for (j = 0; j < 2; j++)
33 asm volatile ("");
34 }
35 }
36
37 static void
38 qux (void *p, size_t q)
39 {
40 if (__builtin_object_size (p, 1) < q)
41 baz (__builtin_object_size (p, 1), q); /* { dg-bogus "detected overflow" } */
42 __builtin_memset (p, 0, q);
43 }
44
45 static void
46 corge (union U *u)
47 {
48 qux (&u->c, sizeof (u->c));
49 qux (&u->i, sizeof (u->i));
50 }
51
52 void
53 garply (union U *u)
54 {
55 int i, j;
56 for (i = 0; i < 1; i++)
57 {
58 corge (u);
59 for (j = 0; j < 2; j++)
60 asm volatile ("");
61 }
62 }