diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2025-02-20 09:11:21 +0000 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2025-03-24 13:07:09 +0100 |
commit | a4d2184f4305f631eec342b0b5e7fb31981cd31d (patch) | |
tree | 04ed4c43b21be8902f01f7cd52c621c09db02a1a /gcc | |
parent | ee743907d9bdaaa4e6717ab4c62e322d0987e801 (diff) | |
download | gcc-a4d2184f4305f631eec342b0b5e7fb31981cd31d.zip gcc-a4d2184f4305f631eec342b0b5e7fb31981cd31d.tar.gz gcc-a4d2184f4305f631eec342b0b5e7fb31981cd31d.tar.bz2 |
gccrs: derive(Eq): Create copies of Eq typepath to avoid NodeId confusion
gcc/rust/ChangeLog:
* expand/rust-derive-eq.cc: Copy `Eq` typepath.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/expand/rust-derive-eq.cc | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/rust/expand/rust-derive-eq.cc b/gcc/rust/expand/rust-derive-eq.cc index 47a8350..dc173de 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<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), |