blob: b9350d79ebf073bfb96c5e951534dc5cfde3b2b2 [file] [log] [blame]
/* PR tree-optimization/101397 - spurious warning writing to the result
of stpcpy minus 1
{ dg-do compile }
{ dg-options "-O2 -Wall" } */
char* strcpy (char*, const char*);
void sink (int, ...);
extern char ax[], a3[3], a5[5], *s;
volatile int x;
void test_strcpy (int i)
{
{
char *p = strcpy (ax, s);
x = p[-1]; // { dg-warning "\\\[-Warray-bounds" }
x = p[ 0];
x = p[+9];
}
{
char *p = strcpy (a3, s);
x = p[-1]; // { dg-warning "\\\[-Warray-bounds" }
x = p[0];
x = p[1];
x = p[2];
x = p[3]; // { dg-warning "\\\[-Warray-bounds" }
}
{
char *p = strcpy (a5, s);
x = p[-1]; // { dg-warning "\\\[-Warray-bounds" }
sink (p[0], p[1], p[2], p[3], p[4]);
x = p[ 5]; // { dg-warning "\\\[-Warray-bounds" }
}
{
char *p = strcpy (a5 + 1, s);
x = p[-2]; // { dg-warning "\\\[-Warray-bounds" }
sink (p[-1], p[0], p[1], p[2], p[3]);
x = p[4]; // { dg-warning "\\\[-Warray-bounds" }
}
{
char *p = strcpy (a5 + 2, s);
x = p[-3]; // { dg-warning "\\\[-Warray-bounds" }
sink (p[-2], p[-1], p[0], p[1], p[2]);
x = p[3]; // { dg-warning "\\\[-Warray-bounds" }
}
{
char *p = strcpy (a5 + 3, s);
x = p[-4]; // { dg-warning "\\\[-Warray-bounds" }
sink (p[-3], p[-2], p[-1], p[0], p[1]);
x = p[2]; // { dg-warning "\\\[-Warray-bounds" }
}
{
char *p = strcpy (ax, a3);
p[-1] = 1; // { dg-warning "\\\[-Warray-bounds" }
sink (p[0], p[1], p[2], p[9], p[99]);
}
}