https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92815
Bug ID: 92815
Summary: spurious -Wstringop-overflow writing into a flexible
array of an extern struct
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: ---
Diagnosing the strcpy call below isn't justified because the flexible array
into which it writes is a member of an extern object that could be initialized
to be large enough to fit the string (e.g., as shown in the comment).
$ cat t.c && gcc -O2 -S -Wall -Wno-array-bounds t.c
extern struct S s /* = { 5, { 1, 2, 3, 4, 5 } } */;
void g (void)
{
__builtin_strcpy (s.ax, "123"); // bogus warning
}
t.c: In function ‘g’:
t.c:7:3: warning: ‘__builtin_memcpy’ writing 4 bytes into a region of size 0
overflows the destination [-Wstringop-overflow=]
7 | __builtin_strcpy (s.ax, "123"); // bogus warning
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~