https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88992
Bug ID: 88992 Summary: missing -Warray-bounds indexing into a zero-length array Product: gcc Version: 9.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: --- Also while adding a test for the fix for bug 88956 I noticed that GCC doesn't diagnose indexing into zero-length arrays. The out-of-bounds accesses to the global zero-length arrays are folded to zero while those to the local ones are emitted. $ gcc -O2 -S -Wall t.c const char s1[1] = { }; int f1 (void) { return s1[3]; // -Warray-bounds (good) } const char s0[0] = { }; int f0 (void) { return s0[3]; // missing warning } int g1 (void) { const char s1[1] = { }; return s1[3]; // -Warray-bounds (good) } int g0 (void) { const char s0[0] = { }; return s0[3]; // missing warning } t.c: In function ‘f1’: t.c:4:12: warning: array subscript 3 is above array bounds of ‘const char[1]’ [-Warray-bounds] 4 | return s1[3]; // -Warray-bounds (good) | ~~^~~ t.c:1:12: note: while referencing ‘s1’ 1 | const char s1[1] = { }; | ^~ t.c: In function ‘g1’: t.c:17:12: warning: array subscript 3 is above array bounds of ‘const char[1]’ [-Warray-bounds] 17 | return s1[3]; // -Warray-bounds (good) | ~~^~~ t.c:16:14: note: while referencing ‘s1’ 16 | const char s1[1] = { }; | ^~