135 lines
3.8 KiB
C
135 lines
3.8 KiB
C
/* 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" }
|
|
}
|
|
}
|