https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94881
Bug ID: 94881
Summary: incorrect Wstringop-overflow warning with thread
sanitizer
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: sanitizer
Assignee: unassigned at gcc dot gnu.org
Reporter: arnd at linaro dot org
CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org,
jakub at gcc dot gnu.org, kcc at gcc dot gnu.org, marxin at
gcc dot gnu.org
Target Milestone: ---
A gcc-10 snapshot from earlier this month (dated 2020-04-13) produced a
-Wstringop-overflow warning that made no sense when building the Linux kernel.
I reduced it to a small test case
https://godbolt.org/z/NyjxvH
struct a {
char b[50];
};
struct c {
short action;
struct a d;
};
struct f {
short command;
struct c e;
};
void i(struct f *f, int *g, unsigned h) {
struct c *j = &f->e;
j->action = 0;
__builtin_memcpy(&j->d.b[h], g, 16);
}
$ x86_64-linux-gcc -O2 -Wall -fsanitize=thread test.c -c
test.c:In function 'i':
test.c:15:3: warning: writing 16 bytes into a region of size 0
[-Wstringop-overflow=]
15 | __builtin_memcpy(&j->d.b[h], g, 16);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
test.c:5:9: note: at offset 0 to object 'action' with size 2 declared here
5 | short action;
| ^~~~~~