/* PR middle-end/40946 */ /* { dg-do compile } */ /* { dg-options "-O2 -Wall" } */ struct A { unsigned char a1[8]; unsigned short a2, a3, a4, a5, a6, a7; }; int bar (void *, const char *, int); char *foo (void *, int); char * baz (const char *x, const char *y) { int a = sizeof (struct A) + 2 * (__builtin_strlen (y) + __builtin_strlen (x) + 24) + 16; struct A *b = __builtin_malloc (a); char *c; int d; b->a4 = sizeof (struct A); c = ((char *) b) + b->a4; d = ((char *) b) + a - c; b->a2 = b->a3 = (unsigned short) bar (c, y, d); /* { dg-bogus "array subscript is above array bounds" } */ c += b->a2; d = ((char *) b) + a - c; b->a7 = b->a4 + b->a2; b->a5 = b->a6 = (unsigned short) bar (c, x, d); c = foo (b, a); return c; }