https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101854
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |msebor at gcc dot gnu.org Last reconfirmed| |2021-08-12 Blocks| |88443 Status|UNCONFIRMED |NEW Ever confirmed|0 |1 --- Comment #7 from Martin Sebor <msebor at gcc dot gnu.org> --- Below is a further simplified test case. The code in initialize_argument_information() that computes the sizes of actual arguments to array parameters and issues a warning if the former is less than expected doesn't consider the implicit pointer argument passed to functions that return structs by value. It's off by one for those. $ cat t.c && gcc -S -Wall t.c struct A { int a[5]; }; struct A g (int*, int[6][8]); struct A f (void) { int a[2]; return g (a, 0); } t.c: In function ‘f’: t.c:8:10: warning: ‘g’ accessing 192 bytes in a region of size 8 [-Wstringop-overflow=] 8 | return g (a, 0); | ^~~~~~~~ t.c:8:10: note: referencing argument 2 of type ‘int (*)[8]’ t.c:3:10: note: in a call to function ‘g’ 3 | struct A g (int*, int[6][8]); | ^ Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88443 [Bug 88443] [meta-bug] bogus/missing -Wstringop-overflow warnings