On Thu, Nov 27, 2025 at 11:16:06AM +0100, Andreas Schwab wrote:
> There are more errors:
>
> ../../gcc/rust/lex/rust-lex.cc:2665:51: error: character not encodable in a
> single code unit
> 2665 | 0xfe0f /* VARIATION SELECTOR-16 */, u'🦀'};
> | ^~~~~
Oops, consider that changed from u'🦀' to U'🦀' in my copy.
> /opt/gcc/gcc-20251127/Build/prev-aarch64-suse-linux/libstdc++-v3/include/bits/stl_vector.h:1109:51:
> error: invalid use of incomplete type ‘class Rust::TyTy::TypeBoundPredicate’
> 1109 | ptrdiff_t __dif = this->_M_impl._M_finish -
> this->_M_impl._M_start;
> |
> ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
This is something I'll defer to the Rust maintainers, I really have no idea
why they forward declare std::vector<TypeBoundPredicate> for an incomplete
type.
Fixing that requires some major reshufling of the
typecheck/rust-tyty-bounds.h
typecheck/rust-tyty-subst.h
typecheck/rust-tyty.h
headers, likely defining TyTy::SubstitutionArg and TyTy::TypeBoundPredicate
in rust-tyty-bounds.h and forward declaring anything they need in
rust-tyty-bounds.h or so. I'm really surprised vectors of incomplete worked
fine in C++ <= 17, but most likely with less constexpr stuff one could get
away with it.
Jakub