https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99502
Bug ID: 99502 Summary: missing -Warray-bounds on partial out of bounds access in C++ Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- The program below triggers two instances of -Warray-bounds when compiled as C code but only one when compiled as C++. This is a regression introduced in r11-7563. $ cat u.C && gcc -O2 -S -Wall u.C typedef struct A { int i; } A; char a[sizeof (A) - 1]; void f (A x) { A *p = (A*)a; *p = x; // -Warray-bounds (good) } void g (void) { A *p = (A*)a; p->i = 0; // missing warning in C++ } u.C: In function ‘void f(A)’: u.C:8:6: warning: array subscript ‘A[0]’ is partly outside array bounds of ‘char [3]’ [-Warray-bounds] 8 | *p = x; // -Warray-bounds (good) | ~~~^~~ u.C:3:6: note: while referencing ‘a’ 3 | char a[sizeof (A) - 1]; | ^