aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPhilip Herron <herron.philip@googlemail.com>2025-02-18 17:45:58 +0000
committerPhilip Herron <philip.herron@embecosm.com>2025-03-14 16:36:36 +0000
commitaa88863a0f370235931f5d948ed5019fdc9254a9 (patch)
tree6c029bad22299b4d73272ba012507001b49b9501 /gcc
parentd93efa777e31b037d163bf26e1c93d05a0705912 (diff)
downloadgcc-aa88863a0f370235931f5d948ed5019fdc9254a9.zip
gcc-aa88863a0f370235931f5d948ed5019fdc9254a9.tar.gz
gcc-aa88863a0f370235931f5d948ed5019fdc9254a9.tar.bz2
gccrs: track DefId on ADT Types this could be useful information
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.philip@googlemail.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-item.cc8
-rw-r--r--gcc/rust/typecheck/rust-tyty.cc47
-rw-r--r--gcc/rust/typecheck/rust-tyty.h39
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 5a427c5..25da29b 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 ca88c4c..2086320 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 163d383..4cf4722 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;