/* { 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; } gives a spurious warning, because the cast of the struct to char pointer is folded into array ref on the first field. -- Summary: [4.3/4.4/4.5 Regression] Spurious array subscript is above bounds warning Product: gcc Version: 4.4.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jakub at gcc dot gnu dot org GCC target triplet: powerpc-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40946