https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118821
Bug ID: 118821 Summary: false warning: '__atomic_store_8' writing 8 bytes into a region of size 0 overflows the destination Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: mikpelinux at gmail dot com Target Milestone: --- Created attachment 60451 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=60451&action=edit test case The following (also attached) is derived from a module in the Erlang VM, which triggered an IMO unwarranted warning on aarch64-linux-gnu: > cat dist.c typedef struct { volatile long value; } ethr_atomic_t; static __inline__ void ethr_atomic_set_mb (ethr_atomic_t *var, long val) { // replace this store with "var->value = val;" and the warning goes away __atomic_store_n (&var->value, val, 3); } struct dist_entry { struct dist_entry *next; ethr_atomic_t dist_cmd_scheduled; }; struct erts_port_sd { struct dist_entry *data; }; struct erl_drv_port { struct erts_port_sd *psd; }; static struct dist_entry * erts_prtsd_get (struct erl_drv_port *prt) { struct erts_port_sd *psd = prt->psd; if (!psd) return 0; return psd->data; } int erts_dist_command (struct erl_drv_port *prt, int reds) { struct dist_entry *dep = erts_prtsd_get (prt); ethr_atomic_set_mb (&dep->dist_cmd_scheduled, 0); dep->next = 0; // remove this store and the warning goes away return 0; } > gcc -O2 -Wall -c dist.c In function 'ethr_atomic_set_mb', inlined from 'erts_dist_command' at dist.c:40:5: dist.c:8:5: warning: '__atomic_store_8' writing 8 bytes into a region of size 0 overflows the destination [-Wstringop-overflow=] 8 | __atomic_store_n (&var->value, val, 3); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In function 'erts_dist_command': cc1: note: destination object is likely at address zero The original source, the Erlang VM version 27.2.2, only triggered on aarch64-linux-gnu, but this reduced test case also triggers on x86_64-linux-gnu. gcc-10 and 11 do not produce this warning, but gcc-12/13/14/15 do. I've marked two lines with source changes that don't change the semantics of the code, but either of those two changes is enough to silence the warning.