https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92936
Bug ID: 92936 Summary: missing warning on a past-the-end store to a PHI Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- Out of bounds stores to destinations that are the results of conditionals like the one in g() below are not diagnosed. They should be both by -Warray-bounds and by -Wstringop-overflow (without duplicates) but they're not because PHI expressions aren't handled. $ cat b.c && gcc -O2 -S -Wall b.c void sink (void*); void f (int n) { char a3[3], a5[5], *p; if (n <= 3) { n = 3; p = a3; p[n] = 0; // -Warray-bounds } else { n = 5; p = a5; p[n] = 0; // -Warray-bounds } sink (p); } void g (int n) { char a3[3], a5[5], *p; if (n <= 3) { n = 3; p = a3; } else { n = 5; p = a5; } p[n] = 0; // missing warning p[n + 1] = 1; // missing warning p[n + 9] = 2; // missing warning p[12345] = 3; // missing warning sink (p); } b.c: In function ‘f’: b.c:17:8: warning: array subscript 5 is outside array bounds of ‘char[5]’ [-Warray-bounds] 17 | p[n] = 0; // -Warray-bounds | ~^~~ b.c:5:15: note: while referencing ‘a5’ 5 | char a3[3], a5[5], *p; | ^~ b.c:11:8: warning: array subscript 3 is outside array bounds of ‘char[3]’ [-Warray-bounds] 11 | p[n] = 0; // -Warray-bounds | ~^~~ b.c:5:8: note: while referencing ‘a3’ 5 | char a3[3], a5[5], *p; | ^~