https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99676
Bug ID: 99676 Summary: missing detail in warning for passing smaller array to bigger argument Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: minor Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- The warning(s) below are confusing: 1) each mentions the argument type is 'int *' when it actually uses 'int[4]' to trigger, and 2) it doesn't point to the declaration of the object or subobject whose size it uses. In cases like pr99673 the missing details make the warning harder than necessary to understand and decide if it's a false positive. $ cat x.c && gcc -O -S -Wall x.c struct A { int a[2], b[2]; }; void f (int[4], int[4]); void g (int *p, int *q) { f (p, q); } void h (struct A *p) { g (p->a, p->b); } In function ‘g’, inlined from ‘h’ at x.c:12:3: x.c:7:3: warning: ‘f’ accessing 16 bytes in a region of size 8 [-Wstringop-overflow=] 7 | f (p, q); | ^~~~~~~~ x.c: In function ‘h’: x.c:7:3: note: referencing argument 1 of type ‘int *’ In function ‘g’, inlined from ‘h’ at x.c:12:3: x.c:7:3: warning: ‘f’ accessing 16 bytes in a region of size 8 [-Wstringop-overflow=] x.c: In function ‘h’: x.c:7:3: note: referencing argument 2 of type ‘int *’ x.c:3:6: note: in a call to function ‘f’ 3 | void f (int[4], int[4]); | ^