From: Arthur Cohen Date: Thu, 20 Feb 2025 09:11:21 +0000 (+0000) Subject: derive(Eq): Create copies of Eq typepath to avoid NodeId confusion X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=35afe3943cc03ce35b3529a23f4fb9e3764c4c81;p=thirdparty%2Fgcc.git derive(Eq): Create copies of Eq typepath to avoid NodeId confusion gcc/rust/ChangeLog: * expand/rust-derive-eq.cc: Copy `Eq` typepath. --- diff --git a/gcc/rust/expand/rust-derive-eq.cc b/gcc/rust/expand/rust-derive-eq.cc index 47a8350d2ff..dc173defd67 100644 --- a/gcc/rust/expand/rust-derive-eq.cc +++ b/gcc/rust/expand/rust-derive-eq.cc @@ -113,13 +113,17 @@ DeriveEq::eq_impls ( std::unique_ptr &&fn, std::string name, const std::vector> &type_generics) { + // We create two copies of the type-path to avoid duplicate NodeIds auto eq = builder.type_path ({"core", "cmp", "Eq"}, true); + auto eq_bound + = builder.trait_bound (builder.type_path ({"core", "cmp", "Eq"}, true)); + auto steq = builder.type_path (LangItem::Kind::STRUCTURAL_TEQ); auto trait_items = vec (std::move (fn)); auto eq_generics - = setup_impl_generics (name, type_generics, builder.trait_bound (eq)); + = setup_impl_generics (name, type_generics, std::move (eq_bound)); auto steq_generics = setup_impl_generics (name, type_generics); auto eq_impl = builder.trait_impl (eq, std::move (eq_generics.self_type),