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; | ^~~~~~