From: Philip Herron <herron.phi...@googlemail.com>

gcc/rust/ChangeLog:

        * typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): track 
DefId of origin
        * typecheck/rust-tyty.cc (BaseType::monomorphized_clone): likewise
        (ADTType::ADTType): likewise
        (ADTType::get_id): likewise
        (ADTType::clone): likewise
        * typecheck/rust-tyty.h: likewise

Signed-off-by: Philip Herron <herron.phi...@googlemail.com>
---
 .../typecheck/rust-hir-type-check-item.cc     |  8 +++-
 gcc/rust/typecheck/rust-tyty.cc               | 47 ++++++++++++++++++-
 gcc/rust/typecheck/rust-tyty.h                | 39 ++++++---------
 3 files changed, 65 insertions(+), 29 deletions(-)

diff --git a/gcc/rust/typecheck/rust-hir-type-check-item.cc 
b/gcc/rust/typecheck/rust-hir-type-check-item.cc
index 16c664fb595..a003848cce0 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-item.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-item.cc
@@ -232,6 +232,7 @@ TypeCheckItem::visit (HIR::TupleStruct &struct_decl)
     = parse_repr_options (attrs, struct_decl.get_locus ());
 
   auto *type = new TyTy::ADTType (
+    struct_decl.get_mappings ().get_defid (),
     struct_decl.get_mappings ().get_hirid (),
     struct_decl.get_mappings ().get_hirid (),
     struct_decl.get_identifier ().as_string (), ident,
@@ -314,6 +315,7 @@ TypeCheckItem::visit (HIR::StructStruct &struct_decl)
     = parse_repr_options (attrs, struct_decl.get_locus ());
 
   auto *type = new TyTy::ADTType (
+    struct_decl.get_mappings ().get_defid (),
     struct_decl.get_mappings ().get_hirid (),
     struct_decl.get_mappings ().get_hirid (),
     struct_decl.get_identifier ().as_string (), ident,
@@ -376,7 +378,8 @@ TypeCheckItem::visit (HIR::Enum &enum_decl)
 
   // multi variant ADT
   auto *type
-    = new TyTy::ADTType (enum_decl.get_mappings ().get_hirid (),
+    = new TyTy::ADTType (enum_decl.get_mappings ().get_defid (),
+                        enum_decl.get_mappings ().get_hirid (),
                         enum_decl.get_mappings ().get_hirid (),
                         enum_decl.get_identifier ().as_string (), ident,
                         TyTy::ADTType::ADTKind::ENUM, std::move (variants),
@@ -447,7 +450,8 @@ TypeCheckItem::visit (HIR::Union &union_decl)
                          std::move (fields)));
 
   auto *type
-    = new TyTy::ADTType (union_decl.get_mappings ().get_hirid (),
+    = new TyTy::ADTType (union_decl.get_mappings ().get_defid (),
+                        union_decl.get_mappings ().get_hirid (),
                         union_decl.get_mappings ().get_hirid (),
                         union_decl.get_identifier ().as_string (), ident,
                         TyTy::ADTType::ADTKind::UNION, std::move (variants),
diff --git a/gcc/rust/typecheck/rust-tyty.cc b/gcc/rust/typecheck/rust-tyty.cc
index 5d5da4d258c..3951fa88da8 100644
--- a/gcc/rust/typecheck/rust-tyty.cc
+++ b/gcc/rust/typecheck/rust-tyty.cc
@@ -638,7 +638,7 @@ BaseType::monomorphized_clone () const
       for (auto &variant : adt->get_variants ())
        cloned_variants.push_back (variant->monomorphized_clone ());
 
-      return new ADTType (adt->get_ref (), adt->get_ty_ref (),
+      return new ADTType (adt->get_id (), adt->get_ref (), adt->get_ty_ref (),
                          adt->get_identifier (), adt->ident,
                          adt->get_adt_kind (), cloned_variants,
                          adt->clone_substs (), adt->get_repr_options (),
@@ -1621,6 +1621,43 @@ VariantDef::get_ident () const
 
 // ADTType
 
+ADTType::ADTType (DefId id, HirId ref, std::string identifier, RustIdent ident,
+                 ADTKind adt_kind, std::vector<VariantDef *> variants,
+                 std::vector<SubstitutionParamMapping> subst_refs,
+                 SubstitutionArgumentMappings generic_arguments,
+                 RegionConstraints region_constraints, std::set<HirId> refs)
+  : BaseType (ref, ref, TypeKind::ADT, ident, refs),
+    SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
+                    region_constraints),
+    id (id), identifier (identifier), variants (variants), adt_kind (adt_kind)
+{}
+
+ADTType::ADTType (DefId id, HirId ref, HirId ty_ref, std::string identifier,
+                 RustIdent ident, ADTKind adt_kind,
+                 std::vector<VariantDef *> variants,
+                 std::vector<SubstitutionParamMapping> subst_refs,
+                 SubstitutionArgumentMappings generic_arguments,
+                 RegionConstraints region_constraints, std::set<HirId> refs)
+  : BaseType (ref, ty_ref, TypeKind::ADT, ident, refs),
+    SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
+                    region_constraints),
+    id (id), identifier (identifier), variants (variants), adt_kind (adt_kind)
+{}
+
+ADTType::ADTType (DefId id, HirId ref, HirId ty_ref, std::string identifier,
+                 RustIdent ident, ADTKind adt_kind,
+                 std::vector<VariantDef *> variants,
+                 std::vector<SubstitutionParamMapping> subst_refs,
+                 ReprOptions repr,
+                 SubstitutionArgumentMappings generic_arguments,
+                 RegionConstraints region_constraints, std::set<HirId> refs)
+  : BaseType (ref, ty_ref, TypeKind::ADT, ident, refs),
+    SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
+                    region_constraints),
+    id (id), identifier (identifier), variants (variants), adt_kind (adt_kind),
+    repr (repr)
+{}
+
 void
 ADTType::accept_vis (TyVisitor &vis)
 {
@@ -1702,6 +1739,12 @@ ADTType::is_equal (const BaseType &other) const
   return true;
 }
 
+DefId
+ADTType::get_id () const
+{
+  return id;
+}
+
 BaseType *
 ADTType::clone () const
 {
@@ -1709,7 +1752,7 @@ ADTType::clone () const
   for (auto &variant : variants)
     cloned_variants.push_back (variant->clone ());
 
-  return new ADTType (get_ref (), get_ty_ref (), identifier, ident,
+  return new ADTType (get_id (), get_ref (), get_ty_ref (), identifier, ident,
                      get_adt_kind (), cloned_variants, clone_substs (),
                      get_repr_options (), used_arguments,
                      get_region_constraints (), get_combined_refs ());
diff --git a/gcc/rust/typecheck/rust-tyty.h b/gcc/rust/typecheck/rust-tyty.h
index f83caec3bd0..def7cb2169c 100644
--- a/gcc/rust/typecheck/rust-tyty.h
+++ b/gcc/rust/typecheck/rust-tyty.h
@@ -686,45 +686,31 @@ public:
     BaseType *repr = nullptr;
   };
 
-  ADTType (HirId ref, std::string identifier, RustIdent ident, ADTKind 
adt_kind,
-          std::vector<VariantDef *> variants,
+  ADTType (DefId id, HirId ref, std::string identifier, RustIdent ident,
+          ADTKind adt_kind, std::vector<VariantDef *> variants,
           std::vector<SubstitutionParamMapping> subst_refs,
           SubstitutionArgumentMappings generic_arguments
           = SubstitutionArgumentMappings::error (),
           RegionConstraints region_constraints = RegionConstraints{},
-          std::set<HirId> refs = std::set<HirId> ())
-    : BaseType (ref, ref, TypeKind::ADT, ident, refs),
-      SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
-                      region_constraints),
-      identifier (identifier), variants (variants), adt_kind (adt_kind)
-  {}
+          std::set<HirId> refs = std::set<HirId> ());
 
-  ADTType (HirId ref, HirId ty_ref, std::string identifier, RustIdent ident,
-          ADTKind adt_kind, std::vector<VariantDef *> variants,
+  ADTType (DefId id, HirId ref, HirId ty_ref, std::string identifier,
+          RustIdent ident, ADTKind adt_kind,
+          std::vector<VariantDef *> variants,
           std::vector<SubstitutionParamMapping> subst_refs,
           SubstitutionArgumentMappings generic_arguments
           = SubstitutionArgumentMappings::error (),
           RegionConstraints region_constraints = RegionConstraints{},
-          std::set<HirId> refs = std::set<HirId> ())
-    : BaseType (ref, ty_ref, TypeKind::ADT, ident, refs),
-      SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
-                      region_constraints),
-      identifier (identifier), variants (variants), adt_kind (adt_kind)
-  {}
+          std::set<HirId> refs = std::set<HirId> ());
 
-  ADTType (HirId ref, HirId ty_ref, std::string identifier, RustIdent ident,
-          ADTKind adt_kind, std::vector<VariantDef *> variants,
+  ADTType (DefId id, HirId ref, HirId ty_ref, std::string identifier,
+          RustIdent ident, ADTKind adt_kind,
+          std::vector<VariantDef *> variants,
           std::vector<SubstitutionParamMapping> subst_refs, ReprOptions repr,
           SubstitutionArgumentMappings generic_arguments
           = SubstitutionArgumentMappings::error (),
           RegionConstraints region_constraints = RegionConstraints{},
-          std::set<HirId> refs = std::set<HirId> ())
-    : BaseType (ref, ty_ref, TypeKind::ADT, ident, refs),
-      SubstitutionRef (std::move (subst_refs), std::move (generic_arguments),
-                      region_constraints),
-      identifier (identifier), variants (variants), adt_kind (adt_kind),
-      repr (repr)
-  {}
+          std::set<HirId> refs = std::set<HirId> ());
 
   ADTKind get_adt_kind () const { return adt_kind; }
 
@@ -755,6 +741,8 @@ public:
     return identifier + subst_as_string ();
   }
 
+  DefId get_id () const;
+
   BaseType *clone () const final override;
 
   size_t number_of_variants () const { return variants.size (); }
@@ -800,6 +788,7 @@ public:
   handle_substitions (SubstitutionArgumentMappings &mappings) override final;
 
 private:
+  DefId id;
   std::string identifier;
   std::vector<VariantDef *> variants;
   ADTType::ADTKind adt_kind;
-- 
2.45.2

Reply via email to