https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99580
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |diagnostic
Ever confirmed|0 |1
Component|c++ |tree-optimization
Known to fail| |10.2.0, 11.0, 7.3.0, 8.3.0,
| |9.2.0
CC| |msebor at gcc dot gnu.org
Last reconfirmed| |2021-03-14
Blocks| |56456
Status|UNCONFIRMED |NEW
--- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> ---
Confirmed. The warning first appeared with r238761 AKA "Teach VRP to register
assertions along default switch labels (PR18046)."
A simplified test case is below:
$ cat pr99580.C && -O2 -S -Wall -fdump-tree-vrp1-details pr99580.C
struct vec
{
int operator[] (int i)
{
switch (i) {
default:
case 0: return x;
case 1: return y;
case 2: return z;
}
}
int x, y, z;
};
vec v[3];
int f ()
{
int max_el = v[0][1];
int max_j = 1;
for (int i = 0; i < 3; i++)
for (int j = i + 1; j < 3; j++)
if (v[i][j] > max_el)
max_j = j;
return v[max_j][max_j];
}
pr99580.C: In function ‘int f()’:
pr99580.C:28:17: warning: array subscript 3 is above array bounds of ‘vec [3]’
[-Warray-bounds]
28 | return v[max_j][max_j];
| ~~~~~~~^
pr99580.C:16:5: note: while referencing ‘v’
16 | vec v[3];
| ^
$ grep warning pr99580.C.110t.vrp1
Array bound warning for MEM <struct vec[3]> [(struct vec *)&v][max_j_27]
And:
Simulating block 14
extract_range_from_stmt visiting:
max_j_27 = ASSERT_EXPR <max_j_21, (unsigned int) max_j_21 + 4294967295 > 1>;
Intersecting
int ~[1, 2] EQUIVALENCES: { max_j_21 } (1 elements)
and
int [1, 2147483646]
to
int [3, 2147483646] EQUIVALENCES: { max_j_21 } (1 elements)
Intersecting
int [3, 2147483646] EQUIVALENCES: { max_j_21 } (1 elements)
and
int VARYING
to
int [3, 2147483646] EQUIVALENCES: { max_j_21 } (1 elements)
Found new range for max_j_27: int [3, 2147483646] EQUIVALENCES: { } (0
elements)
Adding destination of edge (14 -> 17) to worklist
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56456
[Bug 56456] [meta-bug] bogus/missing -Warray-bounds