On Sat, 11 Feb 2023, 23:38 Jonny Grant, wrote: > Hello > > Anyone else seeing an issue when using c++23 ? > gcc (Ubuntu 12.2.0-3ubuntu1) 12.2.0 > > The only change is to use --std=c++23 > With C++17 std::string is instantiated in the library, not in your code. With C++20 your code instantiates it. That's the only reason the -std option matters here. > -Wrestrict is enabled by -Wall > > > #include > > typedef struct a_bc > { > std::string a; > std::string b; > } a_t; > > void f() > { > a_t c; > > c.a = " sdfsdf fsdfsdf fdfsfdsdf "; // seems to need this long > string to reproduce, down to 8 bytes it didn't > c.b = "E"; > } > > > > > > > > > $ g++ -O3 --std=c++23 -Wall -c -o gcc_err3 src/gcc_err3.cpp > In file included from /usr/include/c++/12/string:40, > from src/gcc_err3.cpp:4: > In static member function ‘static constexpr > std::char_traits::char_type* std::char_traits::copy(char_type*, > const char_type*, std::size_t)’, > inlined from ‘static constexpr void std::__cxx11::basic_string<_CharT, > _Traits, _Alloc>::_S_copy(_CharT*, const _CharT*, size_type) [with _CharT = > char; _Traits = std::char_traits; _Alloc = std::allocator]’ at > /usr/include/c++/12/bits/basic_string.h:423:21, > inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, > _Allocator>& std::__cxx11::basic_string<_CharT, _Traits, > _Alloc>::_M_replace(size_type, size_type, const _CharT*, size_type) [with > _CharT = char; _Traits = std::char_traits; _Alloc = > std::allocator]’ at /usr/include/c++/12/bits/basic_string.tcc:532:22, > inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, > _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::assign(const > _CharT*) [with _CharT = char; _Traits = std::char_traits; _Alloc = > std::allocator]’ at /usr/include/c++/12/bits/basic_string.h:1647:19, > inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, > _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, > _Alloc>::operator=(const _CharT*) [with _CharT = char; _Traits = > std::char_traits; _Alloc = std::allocator]’ at > /usr/include/c++/12/bits/basic_string.h:815:28, > inlined from ‘void f(const std::string&, bool, bool)’ at > src/gcc_err3.cpp:17:13: > /usr/include/c++/12/bits/char_traits.h:431:56: warning: ‘void* > __builtin_memcpy(void*, const void*, long unsigned int)’ accessing > 9223372036854775810 or more bytes at offsets -4611686018427387902 and > [-4611686018427387903, 4611686018427387904] may overlap up to > 9223372036854775813 bytes at offset -3 [-Wrestrict] > 431 | return static_cast(__builtin_memcpy(__s1, > __s2, __n)); > | > ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ >