This is a summary of discussions relative to the merge request created by (dkm)
<[email protected]> titled
gccrs: workaround -Wrestrict false positive [PR114385]
since its creation.
Description: Recent change gives:
```
In file included from
/gccrs/build/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/string:45,
from ../../gcc/rust/rust-system.h:34,
from ../../gcc/rust/lex/rust-token.cc:19:
In static member function 'static constexpr std::char_traits<char>::char_type*
std::char_traits<char>::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<char>; _Alloc = std::allocator<char>]' at
/gccrs/build/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.h:4
87:21,
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<char>; _Alloc = std::allocator<char>]' at
/gccrs/build/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.h:4
82:7,
inlined from 'constexpr void std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>::_M_mutate(size_type, size_type, const _CharT*, size_type) [with _CharT
= char; _Trait
s = std::char_traits<char>; _Alloc = std::allocator<char>]' at
/gccrs/build/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/bits/basic_st
ring.tcc:403:15,
inlined from 'constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_M_append(const
_CharT*, size_type) [
with _CharT = char; _Traits = std::char_traits<char>; _Alloc =
std::allocator<char>]' at /gccrs/build/prev-x86_64-pc-linux-gnu/libstdc+
+-v3/include/bits/basic_string.tcc:498:17,
inlined from 'constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::append(const
_CharT*, size_type) [wit
h _CharT = char; _Traits = std::char_traits<char>; _Alloc =
std::allocator<char>]' at /gccrs/build/prev-x86_64-pc-linux-gnu/libstdc++-v
3/include/bits/basic_string.h:1624:18,
inlined from 'constexpr _Str std::__str_concat(const typename
_Str::value_type*, typename _Str::size_type, const typename _Str::value_type*,
typename _Str::size_type,
const typename _Str::allocator_type&) [with _Str =
__cxx11::basic_string<char>]' at
/gccrs/build/prev-x86_64-pc-linux-gnu/libstdc++-v3/
include/bits/basic_string.h:3908:19,
inlined from 'constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>
std::operator+(const __cxx11::basic_string<_CharT, _Traits, _Alloc>&, const
_CharT*) [with
_CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]' at
/gccrs/build/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/bi
ts/basic_string.h:3984:31,
inlined from 'std::string Rust::Token::as_string() const' at
../../gcc/rust/lex/rust-token.cc:251:45:
/gccrs/build/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/bits/char_traits.h:432:56:
error: 'void* __builtin_memcpy(void*, const void*
, long unsigned int)' accessing 18446744073709551609 or more bytes at offsets 0
and 0 overlaps 9223372036854775795 bytes at offset -9223372036854775802
[-Werror=restrict]
432 | return static_cast<char_type*>(__builtin_memcpy(__s1, __s2,
__n));
| ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
```
Split the concatenation to avoid the warning.
Fix comes from https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125404#c2
gcc/rust/ChangeLog:
PR tree-optimization/114385
* lex/rust-token.cc (Token::as_string): split concatenation.
Co-authored-by: Andreas Schwab <[email protected]>
The full and up to date discussion can be found at
https://forge.sourceware.org/gcc/gcc-TEST/pulls/162
The merge request has been closed without being merged directly on the forge
repository.
On 2026-05-29 10:08:44+00:00, Arthur Cohen (cohenarthur)
<[email protected]> requested changes to the code:
> +++ gcc/rust/lex/rust-token.cc
> @@ -256,1 +262,4 @@
> + s += get_type_hint_str ();
> + return s;
> + }
> return get_str () + get_type_hint_str ();
This line should be deleted as well, other than that the patch looks good to me
- thanks!
> +++ gcc/rust/lex/rust-token.cc
> @@ -256,1 +262,4 @@
> + s += get_type_hint_str ();
> + return s;
> + }
> return get_str () + get_type_hint_str ();
Correct, my mistake, fixed.
On 2026-05-29 11:39:51+00:00, Arthur Cohen (cohenarthur)
<[email protected]> approved the changes:
thank you!
On 2026-05-29 11:41:49+00:00, Arthur Cohen (cohenarthur) wrote:
Pushing this to trunk now