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