https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105585
Bug ID: 105585 Summary: [12/13 Regression] Spurious stringop-overflow warning with <atomic> Product: gcc Version: 12.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: ed at catmur dot uk Target Milestone: --- Reduced (from code in abseil-cpp): #include <atomic> struct S { int i; std::atomic<int> a; }; S* q(); void f(); void g(bool b) { auto p = b ? q() : nullptr; ++p->a; if (p) f(); } In file included from atomic:41, from <source>:1: In member function 'std::__atomic_base<_IntTp>::__int_type std::__atomic_base<_IntTp>::operator++() [with _ITp = int]', inlined from 'void g(bool)' at <source>:10:3: bits/atomic_base.h:385:34: warning: 'unsigned int __atomic_add_fetch_4(volatile void*, unsigned int, int)' writing 4 bytes into a region of size 0 overflows the destination [-Wstringop-overflow=] 385 | { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); } | ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~