Viewing file: pr101419.c (1.22 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* PR tree-optimization/101419 */ /* { dg-do compile } */ /* { dg-options "-O2" } */
typedef __SIZE_TYPE__ size_t; void baz (int, int) __attribute__((__warning__("detected overflow")));
union U { int i; char c; };
static void foo (union U *u) { if (__builtin_object_size (&u->c, 1) < sizeof (u->c)) baz (__builtin_object_size (&u->c, 1), sizeof (u->c)); /* { dg-bogus "detected overflow" } */ __builtin_memset (&u->c, 0, sizeof (u->c));
if (__builtin_object_size (&u->i, 1) < sizeof (u->i)) baz (__builtin_object_size (&u->i, 1), sizeof (u->i)); /* { dg-bogus "detected overflow" } */ __builtin_memset (&u->i, 0, sizeof (u->i)); }
void bar (union U *u) { int i, j; for (i = 0; i < 1; i++) { foo (u); for (j = 0; j < 2; j++) asm volatile (""); } }
static void qux (void *p, size_t q) { if (__builtin_object_size (p, 1) < q) baz (__builtin_object_size (p, 1), q); /* { dg-bogus "detected overflow" } */ __builtin_memset (p, 0, q); }
static void corge (union U *u) { qux (&u->c, sizeof (u->c)); qux (&u->i, sizeof (u->i)); }
void garply (union U *u) { int i, j; for (i = 0; i < 1; i++) { corge (u); for (j = 0; j < 2; j++) asm volatile (""); } }
|