blob: 6487613374dd1d2146c51dd5ecd571a348e995ea [file] [log] [blame]
/* PR middle-end/100137 - -Warray-bounds false positive on varying offset
plus negative
{ dg-do compile }
{ dg-options "-O2 -Wall" } */
extern char ax[], a1[1], a2[2], a3[3], a4[4], a5[5];
int* ptr;
#define X (*ptr++)
__attribute__ ((noipa)) void
array_plus_var_minus_cstint (int i, int j)
{
{
const char *p = ax;
p += i;
X = p[-1];
X = p[-123];
}
{
const char *p = a1;
p += i;
X = p[-1]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-2]; // { dg-warning "\\\[-Warray-bounds" }
X = p[-3]; // { dg-warning "\\\[-Warray-bounds" }
X = p[-4]; // { dg-warning "\\\[-Warray-bounds" }
}
{
const char *p = a2;
p += i;
X = p[-1]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-2]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-3]; // { dg-warning "\\\[-Warray-bounds" }
X = p[-4]; // { dg-warning "\\\[-Warray-bounds" }
}
{
const char *p = a3;
p += i;
X = p[-1]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-2]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-3]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-4]; // { dg-warning "\\\[-Warray-bounds" }
X = p[-5]; // { dg-warning "\\\[-Warray-bounds" }
}
{
const char *p = a4;
p += i;
X = p[-1]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-2]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-3]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-4]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-5]; // { dg-warning "\\\[-Warray-bounds" }
X = p[-6]; // { dg-warning "\\\[-Warray-bounds" }
}
{
const char *p = a5;
p += i;
p += j;
X = p[-1]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-2]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-3]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-4]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-5]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-6]; // { dg-warning "\\\[-Warray-bounds" }
}
}
__attribute__ ((noipa)) void
array_plus_var_minus_cstlong (long i, long j)
{
{
const char *p = ax;
p += i;
X = p[-1];
X = p[-123];
}
{
const char *p = a1;
p += i;
X = p[-1]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-2]; // { dg-warning "\\\[-Warray-bounds" }
X = p[-3]; // { dg-warning "\\\[-Warray-bounds" }
X = p[-4]; // { dg-warning "\\\[-Warray-bounds" }
}
{
const char *p = a2;
p += i;
X = p[-1]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-2]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-3]; // { dg-warning "\\\[-Warray-bounds" }
X = p[-4]; // { dg-warning "\\\[-Warray-bounds" }
}
{
const char *p = a3;
p += i;
X = p[-1]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-2]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-3]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-4]; // { dg-warning "\\\[-Warray-bounds" }
X = p[-5]; // { dg-warning "\\\[-Warray-bounds" }
}
{
const char *p = a4;
p += i;
X = p[-1]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-2]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-3]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-4]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-5]; // { dg-warning "\\\[-Warray-bounds" }
X = p[-6]; // { dg-warning "\\\[-Warray-bounds" }
}
{
const char *p = a5;
p += i;
p += j;
X = p[-1]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-2]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-3]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-4]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-5]; // { dg-bogus "\\\[-Warray-bounds" }
X = p[-6]; // { dg-warning "\\\[-Warray-bounds" }
}
}