blob: 38bf012d0cf669774f61e02059363293e1e05cdc [file] [log] [blame]
/* PR tree-optimization/93582 */
/* { dg-do compile } */
/* { dg-options "-O2 -Warray-bounds" } */
struct S {
unsigned int s1:1;
unsigned int s2:1;
unsigned int s3:1;
unsigned int s4:1;
unsigned int s5:4;
unsigned char s6;
unsigned short s7;
unsigned short s8;
};
struct T {
int t1;
int t2;
};
static inline int
bar (struct S *x)
{
if (x->s4)
return ((struct T *)(x + 1))->t1 + ((struct T *)(x + 1))->t2; /* { dg-bogus "array subscript 1 is outside array bounds of" } */
else
return 0;
}
int
foo (int x, int y)
{
struct S s; /* { dg-bogus "while referencing" } */
s.s6 = x;
s.s7 = y & 0x1FFF;
s.s4 = 0;
return bar (&s);
}
static inline int
qux (struct S *x)
{
int s4 = x->s4;
if (s4)
return ((struct T *)(x + 1))->t1 + ((struct T *)(x + 1))->t2;
else
return 0;
}
int
baz (int x, int y)
{
struct S s;
s.s6 = x;
s.s7 = y & 0x1FFF;
s.s4 = 0;
return qux (&s);
}