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

            Bug ID: 124839
           Summary: [16 Regression] powerpc64le-unknown-linux-gnu
                    bootstrap failure: 'rust/rust-token.o'
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Keywords: build, diagnostic, false-positive
          Severity: normal
          Priority: P3
         Component: bootstrap
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tschwinge at gcc dot gnu.org
                CC: gcc-rust at gcc dot gnu.org
            Blocks: 84774
  Target Milestone: ---
              Host: powerpc64le-unknown-linux-gnu
            Target: powerpc64le-unknown-linux-gnu
             Build: powerpc64le-unknown-linux-gnu

Very likely this is the same underlying issue as PR124267 "False positive
-Wrestrict with std::string::operator+ with -O3"?

In a powerpc64le-unknown-linux-gnu GCC bootstrap, upgrading GCC sources from
commit r16-7588-g8eb03ad712bdbd31f9a1c84b72bcbf0c5ef1b722 to commit
r16-8551-gc684613dea0b00d222ebbae8439ea8fd8c1f1865:

    [...]
    [...]/build-gcc/./prev-gcc/xg++ [...]
[...]/source-gcc/gcc/rust/lex/rust-token.cc
    In file included from
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/string:45,
                     from [...]/source-gcc/gcc/rust/rust-system.h:34,
                     from [...]/source-gcc/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
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:457: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
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:452: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; _Traits = std::char_traits<char>; _Alloc =
std::allocator<char>]’ at
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.tcc:400: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
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.tcc:487:17,
        inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::append(const
_CharT*, size_type) [with _CharT = char; _Traits = std::char_traits<char>;
_Alloc = std::allocator<char>]’ at
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:1594: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
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:3878: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
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:3954:31,
        inlined from ‘std::string Rust::Token::as_string() const’ at
[...]/source-gcc/gcc/rust/lex/rust-token.cc:251:45:
   
[...]/build-gcc/prev-powerpc64le-unknown-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));
          |                                       
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
    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
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:457: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
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:452: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; _Traits = std::char_traits<char>; _Alloc =
std::allocator<char>]’ at
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.tcc:400: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
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.tcc:487:17,
        inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits,
_Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::append(const
_CharT*, size_type) [with _CharT = char; _Traits = std::char_traits<char>;
_Alloc = std::allocator<char>]’ at
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:1594: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
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:3878: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
[...]/build-gcc/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:3954:31,
        inlined from ‘std::string Rust::Token::as_string() const’ at
[...]/source-gcc/gcc/rust/lex/rust-token.cc:256:45:
   
[...]/build-gcc/prev-powerpc64le-unknown-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));
          |                                       
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
    cc1plus: all warnings being treated as errors
    make[3]: *** [[...]/source-gcc/gcc/rust/Make-lang.in:458:
rust/rust-token.o] Error 1
    make[3]: Leaving directory '[...]/build-gcc/gcc'
    make[2]: *** [Makefile:5206: all-stage2-gcc] Error 2
    [...]


To work around, I'm (locally) putting '#pragma GCC diagnostic warning
"-Wrestrict"' in front of the "offending" function.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84774
[Bug 84774] [meta-bug] bogus/missing -Wrestrict

Reply via email to