]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
derive(Eq): Create copies of Eq typepath to avoid NodeId confusion
authorArthur Cohen <arthur.cohen@embecosm.com>
Thu, 20 Feb 2025 09:11:21 +0000 (09:11 +0000)
committerCohenArthur <arthur.cohen@embecosm.com>
Thu, 20 Feb 2025 09:37:09 +0000 (09:37 +0000)
gcc/rust/ChangeLog:

* expand/rust-derive-eq.cc: Copy `Eq` typepath.

gcc/rust/expand/rust-derive-eq.cc

index 47a8350d2ffc38aea052702b5cae6ca9a80a6724..dc173defd67e70dd660d7f88ab753999fc496681 100644 (file)
@@ -113,13 +113,17 @@ DeriveEq::eq_impls (
   std::unique_ptr<AssociatedItem> &&fn, std::string name,
   const std::vector<std::unique_ptr<GenericParam>> &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),