https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114385

--- Comment #7 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Arthur Cohen <[email protected]>:

https://gcc.gnu.org/g:160159b272f9880dfdb5e4e8fad4bbe475567809

commit r17-983-g160159b272f9880dfdb5e4e8fad4bbe475567809
Author: Marc Poulhiès <[email protected]>
Date:   Thu May 28 22:11:52 2026 +0200

    gccrs: workaround  -Wrestrict false positive [PR114385]

    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]>
    Signed-off-by: Marc Poulhiès <[email protected]>

Reply via email to