]>
Commit | Line | Data |
---|---|---|
dddb6ffd JJ |
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 | } |