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

Reply via email to