https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105726
Bug ID: 105726 Summary: spurious warning with -Warray-bounds Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: cuzdav at gmail dot com Target Milestone: --- Created attachment 53030 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=53030&action=edit preprocessed version I just ran into an issue that seems to have appeared in Gcc 10.1 and is still there in 11, 12, and in the trunk. The following code produces a spurious warning about reading out of bounds, but if I remove the "pad" field, or change from std::array to a "raw" array, the warning goes away. //=============================== #include <array> #include <cstring> struct X { char pad[4]; std::array<char, 1> mField; }; void encode(char* aBuffer, const X& aMessage) { strncpy(aBuffer, aMessage.mField.data(), 1); } //=============================== LIVE: https://godbolt.org/z/zEsx5P8eP <source>: In function 'void encode(char*, const X&)': <source>:10:16: warning: 'char* strncpy(char*, const char*, size_t)' offset 4 from the object at 'aMessage' is out of the bounds of referenced subobject 'std::array<char, 1>::_M_elems' with type 'char [1]' at offset 4 [-Warray-bounds] 10 | strncpy(aBuffer, aMessage.mField.data(), 1); | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from <source>:1: /opt/compiler-explorer/gcc-12.1.0/include/c++/12.1.0/array:115:56: note: subobject 'std::array<char, 1>::_M_elems' declared here 115 | typename _AT_Type::_Type _M_elems; | ^~~~~~~~ Compiler returned: 0 OUTPUT of g++ -v Using built-in specs. COLLECT_GCC=/opt/imc/gcc-12.1.0/bin/g++ COLLECT_LTO_WRAPPER=/opt/imc/gcc-12.1.0/libexec/gcc/x86_64-pc-linux-gnu/12.1.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../gcc-12.1.0/configure --prefix=/opt/imc/gcc-12.1.0 --enable-languages=c,c++,fortran,lto --disable-multilib --with-build-time-tools=/build/INSTALLDIR//opt/imc/gcc-12.1.0/bin --enable-libstdcxx-time=rt Thread model: posix Supported LTO compression algorithms: zlib gcc version 12.1.0 (GCC)