From e9ed96bfee0ec8ca9bd6c2ddeec279ef5237009c Mon Sep 17 00:00:00 2001 From: varun-r-mallya Date: Sat, 5 Apr 2025 02:43:41 +0530 Subject: [PATCH 1/3] gccrs: Remove EnumItemDiscriminant from AST and related visitors gcc/rust/ChangeLog: * ast/rust-ast-collector.cc (TokenCollector::visit): Removed. * ast/rust-ast-collector.h (TokenCollector::visit): Removed. * ast/rust-ast-full-decls.h: Removed EnumItemDiscriminant. * ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Removed. * ast/rust-ast-visitor.h (ASTVisitor::visit): Removed. * ast/rust-ast.cc (EnumItemDiscriminant::as_string): Removed. * ast/rust-item.h (EnumItemDiscriminant): Removed. * expand/rust-cfg-strip.cc (CfgStrip::visit): Removed. * expand/rust-cfg-strip.h (CfgStrip::visit): Removed. * expand/rust-derive.h (DeriveVisitor::visit): Removed. * expand/rust-expand-visitor.cc (ExpandVisitor::visit): Removed. * expand/rust-expand-visitor.h (ExpandVisitor::visit): Removed. * hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Removed. * hir/rust-ast-lower-base.h (ASTLoweringBase::visit): Removed. * hir/rust-ast-lower-enumitem.h (ASTLoweringEnumItem::visit): Removed. * parse/rust-parse-impl.h (Parser::parse_enum_item): Modified EQUAL case to return EnumItemDiscriminant. * resolve/rust-ast-resolve-base.cc (ResolverBase::visit): Removed. * resolve/rust-ast-resolve-base.h (ResolverBase::visit): Removed. * resolve/rust-ast-resolve-item.cc (ResolveItem::visit): Removed. * resolve/rust-ast-resolve-item.h (ResolveItem::visit): Removed. * resolve/rust-ast-resolve-stmt.h (ResolveStmt::visit): Removed. * resolve/rust-ast-resolve-toplevel.h (ResolveTopLevel::visit): Removed. * resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::visit): Removed. * resolve/rust-toplevel-name-resolver-2.0.h (TopLevel::visit): Removed. * util/rust-attributes.cc (AttributeChecker::visit): Removed. * util/rust-attributes.h (AttributeChecker::visit): Removed. Addresses #3340 Signed-off-by: varun-r-mallya --- gcc/rust/ast/rust-ast-collector.cc | 9 --- gcc/rust/ast/rust-ast-collector.h | 1 - gcc/rust/ast/rust-ast-full-decls.h | 1 - gcc/rust/ast/rust-ast-visitor.cc | 7 -- gcc/rust/ast/rust-ast-visitor.h | 2 - gcc/rust/ast/rust-ast.cc | 18 ----- gcc/rust/ast/rust-item.h | 66 ------------------- gcc/rust/expand/rust-cfg-strip.cc | 21 ------ gcc/rust/expand/rust-cfg-strip.h | 1 - gcc/rust/expand/rust-derive.h | 1 - gcc/rust/expand/rust-expand-visitor.cc | 6 -- gcc/rust/expand/rust-expand-visitor.h | 1 - gcc/rust/hir/rust-ast-lower-base.cc | 3 - gcc/rust/hir/rust-ast-lower-base.h | 1 - gcc/rust/hir/rust-ast-lower-enumitem.h | 20 ------ gcc/rust/parse/rust-parse-impl.h | 13 ++-- gcc/rust/resolve/rust-ast-resolve-base.cc | 4 -- gcc/rust/resolve/rust-ast-resolve-base.h | 1 - gcc/rust/resolve/rust-ast-resolve-item.cc | 11 ---- gcc/rust/resolve/rust-ast-resolve-item.h | 1 - gcc/rust/resolve/rust-ast-resolve-stmt.h | 20 ------ gcc/rust/resolve/rust-ast-resolve-toplevel.h | 22 ------- .../rust-toplevel-name-resolver-2.0.cc | 6 -- .../resolve/rust-toplevel-name-resolver-2.0.h | 1 - gcc/rust/util/rust-attributes.cc | 4 -- gcc/rust/util/rust-attributes.h | 1 - 26 files changed, 8 insertions(+), 234 deletions(-) diff --git a/gcc/rust/ast/rust-ast-collector.cc b/gcc/rust/ast/rust-ast-collector.cc index d0ecedb0c313..b0e1fb4b479a 100644 --- a/gcc/rust/ast/rust-ast-collector.cc +++ b/gcc/rust/ast/rust-ast-collector.cc @@ -1867,15 +1867,6 @@ TokenCollector::visit (EnumItemStruct &item) {Rust::Token::make (COMMA, UNDEF_LOCATION)}); } -void -TokenCollector::visit (EnumItemDiscriminant &item) -{ - auto id = item.get_identifier ().as_string (); - push (Rust::Token::make_identifier (item.get_locus (), std::move (id))); - push (Rust::Token::make (EQUAL, UNDEF_LOCATION)); - visit (item.get_expr ()); -} - void TokenCollector::visit (Enum &enumeration) { diff --git a/gcc/rust/ast/rust-ast-collector.h b/gcc/rust/ast/rust-ast-collector.h index 3266caf66faf..d63f64abd497 100644 --- a/gcc/rust/ast/rust-ast-collector.h +++ b/gcc/rust/ast/rust-ast-collector.h @@ -320,7 +320,6 @@ class TokenCollector : public ASTVisitor void visit (EnumItem &item); void visit (EnumItemTuple &item); void visit (EnumItemStruct &item); - void visit (EnumItemDiscriminant &item); void visit (Enum &enumeration); void visit (Union &union_item); void visit (ConstantItem &const_item); diff --git a/gcc/rust/ast/rust-ast-full-decls.h b/gcc/rust/ast/rust-ast-full-decls.h index ae103da4401f..c432eabe5e4d 100644 --- a/gcc/rust/ast/rust-ast-full-decls.h +++ b/gcc/rust/ast/rust-ast-full-decls.h @@ -188,7 +188,6 @@ class TupleStruct; class EnumItem; class EnumItemTuple; class EnumItemStruct; -class EnumItemDiscriminant; class Enum; class Union; class ConstantItem; diff --git a/gcc/rust/ast/rust-ast-visitor.cc b/gcc/rust/ast/rust-ast-visitor.cc index 2949f1cc81be..caf751294e53 100644 --- a/gcc/rust/ast/rust-ast-visitor.cc +++ b/gcc/rust/ast/rust-ast-visitor.cc @@ -911,13 +911,6 @@ DefaultASTVisitor::visit (AST::EnumItemStruct &item) visit (field); } -void -DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item) -{ - visit (reinterpret_cast (item)); - visit (item.get_expr ()); -} - void DefaultASTVisitor::visit (AST::Enum &enum_item) { diff --git a/gcc/rust/ast/rust-ast-visitor.h b/gcc/rust/ast/rust-ast-visitor.h index 20f735d7cc68..4bb56511c0c6 100644 --- a/gcc/rust/ast/rust-ast-visitor.h +++ b/gcc/rust/ast/rust-ast-visitor.h @@ -155,7 +155,6 @@ class ASTVisitor virtual void visit (EnumItem &item) = 0; virtual void visit (EnumItemTuple &item) = 0; virtual void visit (EnumItemStruct &item) = 0; - virtual void visit (EnumItemDiscriminant &item) = 0; virtual void visit (Enum &enum_item) = 0; virtual void visit (Union &union_item) = 0; virtual void visit (ConstantItem &const_item) = 0; @@ -331,7 +330,6 @@ class DefaultASTVisitor : public ASTVisitor virtual void visit (AST::EnumItem &item) override; virtual void visit (AST::EnumItemTuple &item) override; virtual void visit (AST::EnumItemStruct &item) override; - virtual void visit (AST::EnumItemDiscriminant &item) override; virtual void visit (AST::Enum &enum_item) override; virtual void visit (AST::Union &union_item) override; virtual void visit (AST::ConstantItem &const_item) override; diff --git a/gcc/rust/ast/rust-ast.cc b/gcc/rust/ast/rust-ast.cc index 43f1ee2f5266..390371dcf4c8 100644 --- a/gcc/rust/ast/rust-ast.cc +++ b/gcc/rust/ast/rust-ast.cc @@ -2952,18 +2952,6 @@ StructField::as_string () const return str; } -std::string -EnumItemDiscriminant::as_string () const -{ - // TODO: rewrite to work with non-linearisable exprs - std::string str = EnumItem::as_string (); - - // add equal and expression - str += " = " + expression->as_string (); - - return str; -} - std::string ExternalTypeItem::as_string () const { @@ -4749,12 +4737,6 @@ EnumItemStruct::accept_vis (ASTVisitor &vis) vis.visit (*this); } -void -EnumItemDiscriminant::accept_vis (ASTVisitor &vis) -{ - vis.visit (*this); -} - void Enum::accept_vis (ASTVisitor &vis) { diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h index 0c94f168f869..e918197f5332 100644 --- a/gcc/rust/ast/rust-item.h +++ b/gcc/rust/ast/rust-item.h @@ -2163,72 +2163,6 @@ class EnumItemStruct : public EnumItem } }; -// A discriminant (numbered enum) item used in an "enum" tagged union -class EnumItemDiscriminant : public EnumItem -{ - std::unique_ptr expression; - -public: - EnumItemDiscriminant (Identifier variant_name, Visibility vis, - std::unique_ptr expr, - std::vector outer_attrs, location_t locus) - : EnumItem (std::move (variant_name), std::move (vis), - std::move (outer_attrs), locus), - expression (std::move (expr)) - {} - - // Copy constructor with clone - EnumItemDiscriminant (EnumItemDiscriminant const &other) - : EnumItem (other), expression (other.expression->clone_expr ()) - {} - - // Overloaded assignment operator to clone - EnumItemDiscriminant &operator= (EnumItemDiscriminant const &other) - { - EnumItem::operator= (other); - expression = other.expression->clone_expr (); - // variant_name = other.variant_name; - // outer_attrs = other.outer_attrs; - - return *this; - } - - // move constructors - EnumItemDiscriminant (EnumItemDiscriminant &&other) = default; - EnumItemDiscriminant &operator= (EnumItemDiscriminant &&other) = default; - - EnumItem::Kind get_enum_item_kind () const override - { - return EnumItem::Kind::Discriminant; - } - - std::string as_string () const override; - - void accept_vis (ASTVisitor &vis) override; - - bool has_expr () { return expression != nullptr; } - - // TODO: is this better? Or is a "vis_block" better? - Expr &get_expr () - { - rust_assert (expression != nullptr); - return *expression; - } - - std::unique_ptr &get_expr_ptr () - { - rust_assert (expression != nullptr); - return expression; - } - -protected: - // Clone function implementation as (not pure) virtual method - EnumItemDiscriminant *clone_item_impl () const override - { - return new EnumItemDiscriminant (*this); - } -}; - // AST node for Rust "enum" - tagged union class Enum : public VisItem { diff --git a/gcc/rust/expand/rust-cfg-strip.cc b/gcc/rust/expand/rust-cfg-strip.cc index e2cc68b3370b..162709f1340e 100644 --- a/gcc/rust/expand/rust-cfg-strip.cc +++ b/gcc/rust/expand/rust-cfg-strip.cc @@ -1944,27 +1944,6 @@ CfgStrip::visit (AST::EnumItemStruct &item) maybe_strip_struct_fields (item.get_struct_fields ()); } -void -CfgStrip::visit (AST::EnumItemDiscriminant &item) -{ - // initial test based on outer attrs - expand_cfg_attrs (item.get_outer_attrs ()); - if (fails_cfg_with_expand (item.get_outer_attrs ())) - { - item.mark_for_strip (); - return; - } - - AST::DefaultASTVisitor::visit (item); - /* strip any internal sub-expressions - expression itself isn't - * allowed to have external attributes in this position so can't be - * stripped. */ - auto &expr = item.get_expr (); - if (expr.is_marked_for_strip ()) - rust_error_at (expr.get_locus (), - "cannot strip expression in this position - outer " - "attributes not allowed"); -} void CfgStrip::visit (AST::Enum &enum_item) { diff --git a/gcc/rust/expand/rust-cfg-strip.h b/gcc/rust/expand/rust-cfg-strip.h index 9f1f21172608..ed2a3f9c121c 100644 --- a/gcc/rust/expand/rust-cfg-strip.h +++ b/gcc/rust/expand/rust-cfg-strip.h @@ -142,7 +142,6 @@ class CfgStrip : public AST::DefaultASTVisitor void visit (AST::EnumItem &item) override; void visit (AST::EnumItemTuple &item) override; void visit (AST::EnumItemStruct &item) override; - void visit (AST::EnumItemDiscriminant &item) override; void visit (AST::Enum &enum_item) override; void visit (AST::Union &union_item) override; void visit (AST::ConstantItem &const_item) override; diff --git a/gcc/rust/expand/rust-derive.h b/gcc/rust/expand/rust-derive.h index 71897ed49b5a..7ee0bf4ee0c2 100644 --- a/gcc/rust/expand/rust-derive.h +++ b/gcc/rust/expand/rust-derive.h @@ -185,7 +185,6 @@ class DeriveVisitor : public AST::ASTVisitor virtual void visit (EnumItem &item) override final{}; virtual void visit (EnumItemTuple &item) override final{}; virtual void visit (EnumItemStruct &item) override final{}; - virtual void visit (EnumItemDiscriminant &item) override final{}; virtual void visit (ConstantItem &const_item) override final{}; virtual void visit (StaticItem &static_item) override final{}; virtual void visit (TraitItemConst &item) override final{}; diff --git a/gcc/rust/expand/rust-expand-visitor.cc b/gcc/rust/expand/rust-expand-visitor.cc index b5e65b5f6414..77c0a280f854 100644 --- a/gcc/rust/expand/rust-expand-visitor.cc +++ b/gcc/rust/expand/rust-expand-visitor.cc @@ -810,12 +810,6 @@ ExpandVisitor::visit (AST::EnumItemStruct &item) expand_struct_fields (item.get_struct_fields ()); } -void -ExpandVisitor::visit (AST::EnumItemDiscriminant &item) -{ - maybe_expand_expr (item.get_expr_ptr ()); -} - void ExpandVisitor::visit (AST::Union &union_item) { diff --git a/gcc/rust/expand/rust-expand-visitor.h b/gcc/rust/expand/rust-expand-visitor.h index 131d62f52270..8d3d402cf76c 100644 --- a/gcc/rust/expand/rust-expand-visitor.h +++ b/gcc/rust/expand/rust-expand-visitor.h @@ -249,7 +249,6 @@ class ExpandVisitor : public AST::DefaultASTVisitor void visit (AST::EnumItem &item) override; void visit (AST::EnumItemTuple &item) override; void visit (AST::EnumItemStruct &item) override; - void visit (AST::EnumItemDiscriminant &item) override; void visit (AST::Union &union_item) override; void visit (AST::ConstantItem &const_item) override; void visit (AST::StaticItem &static_item) override; diff --git a/gcc/rust/hir/rust-ast-lower-base.cc b/gcc/rust/hir/rust-ast-lower-base.cc index 749fe09f3baa..e394dcd15c04 100644 --- a/gcc/rust/hir/rust-ast-lower-base.cc +++ b/gcc/rust/hir/rust-ast-lower-base.cc @@ -332,9 +332,6 @@ void ASTLoweringBase::visit (AST::EnumItemStruct &) {} void -ASTLoweringBase::visit (AST::EnumItemDiscriminant &) -{} -void ASTLoweringBase::visit (AST::Enum &) {} void diff --git a/gcc/rust/hir/rust-ast-lower-base.h b/gcc/rust/hir/rust-ast-lower-base.h index a3e786f21eba..dc3826cad9f9 100644 --- a/gcc/rust/hir/rust-ast-lower-base.h +++ b/gcc/rust/hir/rust-ast-lower-base.h @@ -178,7 +178,6 @@ class ASTLoweringBase : public AST::ASTVisitor virtual void visit (AST::EnumItem &item) override; virtual void visit (AST::EnumItemTuple &item) override; virtual void visit (AST::EnumItemStruct &item) override; - virtual void visit (AST::EnumItemDiscriminant &item) override; virtual void visit (AST::Enum &enum_item) override; virtual void visit (AST::Union &union_item) override; virtual void visit (AST::ConstantItem &const_item) override; diff --git a/gcc/rust/hir/rust-ast-lower-enumitem.h b/gcc/rust/hir/rust-ast-lower-enumitem.h index 57b9c3790832..10dba25a94c5 100644 --- a/gcc/rust/hir/rust-ast-lower-enumitem.h +++ b/gcc/rust/hir/rust-ast-lower-enumitem.h @@ -144,26 +144,6 @@ class ASTLoweringEnumItem : public ASTLoweringBase item.get_locus ()); } - void visit (AST::EnumItemDiscriminant &item) override - { - auto crate_num = mappings.get_current_crate (); - Analysis::NodeMapping mapping (crate_num, item.get_node_id (), - mappings.get_next_hir_id (crate_num), - mappings.get_next_localdef_id (crate_num)); - - if (item.has_visibility ()) - rust_error_at (item.get_locus (), - "visibility qualifier %qs not allowed on enum item", - item.get_visibility ().as_string ().c_str ()); - - HIR::Expr *expr = ASTLoweringExpr::translate (item.get_expr ()); - translated - = new HIR::EnumItemDiscriminant (mapping, item.get_identifier (), - std::unique_ptr (expr), - item.get_outer_attrs (), - item.get_locus ()); - } - private: ASTLoweringEnumItem () : translated (nullptr) {} diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index bd5011329142..da89fc37a116 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -4792,12 +4792,15 @@ Parser::parse_enum_item () std::unique_ptr discriminant_expr = parse_expr (); - return std::unique_ptr ( - new AST::EnumItemDiscriminant (std::move (item_name), std::move (vis), - std::move (discriminant_expr), - std::move (outer_attrs), - item_name_tok->get_locus ())); + // FIXME: We need to add special handling for parsing discriminant + // expressions for all possible enum items, not just enum item + // identifiers (gccrs#3340) + return std::unique_ptr ( + new AST::EnumItem (std::move (item_name), std::move (vis), + std::move (outer_attrs), + item_name_tok->get_locus ())); } + default: // regular enum with just an identifier return std::unique_ptr ( diff --git a/gcc/rust/resolve/rust-ast-resolve-base.cc b/gcc/rust/resolve/rust-ast-resolve-base.cc index 9cc980a88e80..053d69065956 100644 --- a/gcc/rust/resolve/rust-ast-resolve-base.cc +++ b/gcc/rust/resolve/rust-ast-resolve-base.cc @@ -391,10 +391,6 @@ void ResolverBase::visit (AST::EnumItemStruct &) {} -void -ResolverBase::visit (AST::EnumItemDiscriminant &) -{} - void ResolverBase::visit (AST::Enum &) {} diff --git a/gcc/rust/resolve/rust-ast-resolve-base.h b/gcc/rust/resolve/rust-ast-resolve-base.h index 33f01ef5693d..2d81df13031d 100644 --- a/gcc/rust/resolve/rust-ast-resolve-base.h +++ b/gcc/rust/resolve/rust-ast-resolve-base.h @@ -129,7 +129,6 @@ class ResolverBase : public AST::ASTVisitor void visit (AST::EnumItem &); void visit (AST::EnumItemTuple &); void visit (AST::EnumItemStruct &); - void visit (AST::EnumItemDiscriminant &); void visit (AST::Enum &); void visit (AST::Union &); void visit (AST::ConstantItem &); diff --git a/gcc/rust/resolve/rust-ast-resolve-item.cc b/gcc/rust/resolve/rust-ast-resolve-item.cc index 89cf0f3c07e3..c2ab0042daf8 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.cc +++ b/gcc/rust/resolve/rust-ast-resolve-item.cc @@ -347,17 +347,6 @@ ResolveItem::visit (AST::EnumItemStruct &item) } } -void -ResolveItem::visit (AST::EnumItemDiscriminant &item) -{ - auto decl = CanonicalPath::new_seg (item.get_node_id (), - item.get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - - mappings.insert_canonical_path (item.get_node_id (), cpath); -} - void ResolveItem::visit (AST::StructStruct &struct_decl) { diff --git a/gcc/rust/resolve/rust-ast-resolve-item.h b/gcc/rust/resolve/rust-ast-resolve-item.h index 1fd2647b0e37..a49027c9d21d 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.h +++ b/gcc/rust/resolve/rust-ast-resolve-item.h @@ -63,7 +63,6 @@ class ResolveItem : public ResolverBase void visit (AST::EnumItem &item) override; void visit (AST::EnumItemTuple &item) override; void visit (AST::EnumItemStruct &item) override; - void visit (AST::EnumItemDiscriminant &item) override; void visit (AST::StructStruct &struct_decl) override; void visit (AST::Union &union_decl) override; void visit (AST::StaticItem &var) override; diff --git a/gcc/rust/resolve/rust-ast-resolve-stmt.h b/gcc/rust/resolve/rust-ast-resolve-stmt.h index 8791fd46f8f0..ac22767609c6 100644 --- a/gcc/rust/resolve/rust-ast-resolve-stmt.h +++ b/gcc/rust/resolve/rust-ast-resolve-stmt.h @@ -217,26 +217,6 @@ class ResolveStmt : public ResolverBase } } - void visit (AST::EnumItemDiscriminant &item) override - { - auto decl = enum_prefix.append ( - CanonicalPath::new_seg (item.get_node_id (), - item.get_identifier ().as_string ())); - auto path = decl; // this ensures we have the correct relative resolution - auto cpath = canonical_prefix.append (decl); - mappings.insert_canonical_path (item.get_node_id (), cpath); - - resolver->get_type_scope ().insert ( - path, item.get_node_id (), item.get_locus (), false, Rib::ItemType::Type, - [&] (const CanonicalPath &, NodeId, location_t locus) -> void { - rich_location r (line_table, item.get_locus ()); - r.add_range (locus); - redefined_error (r); - }); - - // Done, no fields. - } - void visit (AST::StructStruct &struct_decl) override { auto decl diff --git a/gcc/rust/resolve/rust-ast-resolve-toplevel.h b/gcc/rust/resolve/rust-ast-resolve-toplevel.h index 4dc04eb12f6e..5b58a05f7834 100644 --- a/gcc/rust/resolve/rust-ast-resolve-toplevel.h +++ b/gcc/rust/resolve/rust-ast-resolve-toplevel.h @@ -212,28 +212,6 @@ class ResolveTopLevel : public ResolverBase mappings.insert_module_child (current_module, item.get_node_id ()); } - void visit (AST::EnumItemDiscriminant &item) override - { - auto decl = CanonicalPath::new_seg (item.get_node_id (), - item.get_identifier ().as_string ()); - auto path = prefix.append (decl); - auto cpath = canonical_prefix.append (decl); - - resolver->get_type_scope ().insert ( - path, item.get_node_id (), item.get_locus (), false, Rib::ItemType::Type, - [&] (const CanonicalPath &, NodeId, location_t locus) -> void { - rich_location r (line_table, item.get_locus ()); - r.add_range (locus); - redefined_error (r); - }); - - mappings.insert_canonical_path (item.get_node_id (), cpath); - - NodeId current_module = resolver->peek_current_module_scope (); - mappings.insert_module_child_item (current_module, decl); - mappings.insert_module_child (current_module, item.get_node_id ()); - } - void visit (AST::StructStruct &struct_decl) override { auto decl diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc index 2c0cc660601b..0a4e9560e9ae 100644 --- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc @@ -379,12 +379,6 @@ TopLevel::visit (AST::EnumItemStruct &variant) insert_enum_variant_or_error_out (variant.get_identifier (), variant); } -void -TopLevel::visit (AST::EnumItemDiscriminant &variant) -{ - insert_or_error_out (variant.get_identifier (), variant, Namespace::Types); -} - void TopLevel::visit (AST::Enum &enum_item) { diff --git a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h index 16e9984876fe..02ec6a33e4dd 100644 --- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h +++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h @@ -172,7 +172,6 @@ class TopLevel : public DefaultResolver void visit (AST::EnumItem &variant) override; void visit (AST::EnumItemTuple &variant) override; void visit (AST::EnumItemStruct &variant) override; - void visit (AST::EnumItemDiscriminant &variant) override; void visit (AST::Enum &enum_item) override; void visit (AST::Union &union_item) override; void visit (AST::ConstantItem &const_item) override; diff --git a/gcc/rust/util/rust-attributes.cc b/gcc/rust/util/rust-attributes.cc index 079e17793db6..d02903e69f68 100644 --- a/gcc/rust/util/rust-attributes.cc +++ b/gcc/rust/util/rust-attributes.cc @@ -718,10 +718,6 @@ void AttributeChecker::visit (AST::EnumItemStruct &) {} -void -AttributeChecker::visit (AST::EnumItemDiscriminant &) -{} - void AttributeChecker::visit (AST::Enum &enumeration) { diff --git a/gcc/rust/util/rust-attributes.h b/gcc/rust/util/rust-attributes.h index c341b3e0a5db..3ce7dd7b757b 100644 --- a/gcc/rust/util/rust-attributes.h +++ b/gcc/rust/util/rust-attributes.h @@ -193,7 +193,6 @@ class AttributeChecker : public AST::DefaultASTVisitor void visit (AST::EnumItem &item) override; void visit (AST::EnumItemTuple &item) override; void visit (AST::EnumItemStruct &item) override; - void visit (AST::EnumItemDiscriminant &item) override; void visit (AST::Enum &enum_item) override; void visit (AST::Union &union_item) override; void visit (AST::ConstantItem &const_item) override; From 7669e1be9c43f07c30aa1555ea228947dce5744c Mon Sep 17 00:00:00 2001 From: varun-r-mallya Date: Sat, 5 Apr 2025 16:09:58 +0530 Subject: [PATCH 2/3] hir: Remove EnumItemDiscriminant from HIR gcc/rust/ChangeLog: * ast/rust-ast-collector.cc (TokenCollector::visit): Removed. * backend/rust-compile-item.h (CompileItem::visit): Remove EnumItemDiscriminant case. * backend/rust-compile-stmt.h (CompileStmt::visit): Remove EnumItemDiscriminant case. * checks/errors/borrowck/rust-bir-builder-expr-stmt.h (BIRBuilderExprStmt::visit): Remove EnumItemDiscriminant case. * checks/errors/borrowck/rust-bir-builder-struct.h (BIRBuilderStruct::visit): Remove EnumItemDiscriminant case. * checks/errors/borrowck/rust-function-collector.h (FunctionCollector::visit): Remove EnumItemDiscriminant case. * checks/errors/privacy/rust-privacy-reporter.cc (PrivacyReporter::visit): Remove EnumItemDiscriminant implementation. * checks/errors/privacy/rust-privacy-reporter.h (PrivacyReporter::visit): Remove EnumItemDiscriminant declaration. * checks/errors/rust-const-checker.cc (ConstChecker::visit): Remove EnumItemDiscriminant implementation. * checks/errors/rust-const-checker.h (ConstChecker::visit): Remove EnumItemDiscriminant declaration. * checks/errors/rust-hir-pattern-analysis.cc (PatternChecker::visit): Remove EnumItemDiscriminant implementation. * checks/errors/rust-hir-pattern-analysis.h (PatternChecker::visit): Remove EnumItemDiscriminant declaration. * checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit): Remove EnumItemDiscriminant implementation. * checks/errors/rust-unsafe-checker.h (UnsafeChecker::visit): Remove EnumItemDiscriminant declaration. * hir/rust-hir-dump.cc (Dump::visit): Remove EnumItemDiscriminant implementation. * hir/rust-hir-dump.h (Dump::visit): Remove EnumItemDiscriminant declaration. * hir/tree/rust-hir-full-decls.h: Remove EnumItemDiscriminant forward declaration. * hir/tree/rust-hir-item.cc (EnumItemDiscriminant::as_string): Remove implementation. (EnumItemDiscriminant::accept_vis): Remove implementation. * hir/tree/rust-hir-item.h: Remove EnumItemDiscriminant class definition. * hir/tree/rust-hir-visitor.h (HIRFullVisitor::visit): Remove EnumItemDiscriminant declaration. (HIRStmtVisitor::visit): Remove EnumItemDiscriminant declaration. * hir/tree/rust-hir.cc (EnumItemDiscriminant::as_string): Remove implementation. (EnumItemDiscriminant::accept_vis): Remove implementation. * typecheck/rust-hir-type-check-enumitem.cc (TypeCheckEnumItem::Resolve): Remove EnumItemDiscriminant case. (TypeCheckEnumItem::visit): Remove EnumItemDiscriminant implementation. * typecheck/rust-hir-type-check-enumitem.h (TypeCheckEnumItem::visit): Remove EnumItemDiscriminant declaration. * typecheck/rust-hir-type-check-stmt.h (TypeCheckStmt::visit): Remove EnumItemDiscriminant case. Addresses Rust-GCC#3340 Signed-off-by: varun-r-mallya --- gcc/rust/backend/rust-compile-item.h | 1 - gcc/rust/backend/rust-compile-stmt.h | 1 - .../borrowck/rust-bir-builder-expr-stmt.h | 1 - .../errors/borrowck/rust-bir-builder-struct.h | 1 - .../errors/borrowck/rust-function-collector.h | 1 - .../errors/privacy/rust-privacy-reporter.cc | 4 -- .../errors/privacy/rust-privacy-reporter.h | 1 - gcc/rust/checks/errors/rust-const-checker.cc | 10 ---- gcc/rust/checks/errors/rust-const-checker.h | 1 - .../errors/rust-hir-pattern-analysis.cc | 4 -- .../checks/errors/rust-hir-pattern-analysis.h | 1 - gcc/rust/checks/errors/rust-unsafe-checker.cc | 4 -- gcc/rust/checks/errors/rust-unsafe-checker.h | 1 - gcc/rust/hir/rust-hir-dump.cc | 12 ----- gcc/rust/hir/rust-hir-dump.h | 1 - gcc/rust/hir/tree/rust-hir-full-decls.h | 1 - gcc/rust/hir/tree/rust-hir-item.cc | 25 ---------- gcc/rust/hir/tree/rust-hir-item.h | 45 ----------------- gcc/rust/hir/tree/rust-hir-visitor.h | 3 -- gcc/rust/hir/tree/rust-hir.cc | 23 --------- .../typecheck/rust-hir-type-check-enumitem.cc | 49 ------------------- .../typecheck/rust-hir-type-check-enumitem.h | 1 - gcc/rust/typecheck/rust-hir-type-check-stmt.h | 1 - 23 files changed, 192 deletions(-) diff --git a/gcc/rust/backend/rust-compile-item.h b/gcc/rust/backend/rust-compile-item.h index 59f5d629234b..19946a241eeb 100644 --- a/gcc/rust/backend/rust-compile-item.h +++ b/gcc/rust/backend/rust-compile-item.h @@ -50,7 +50,6 @@ class CompileItem : private HIRCompileBase, protected HIR::HIRStmtVisitor void visit (HIR::EnumItem &) override {} void visit (HIR::EnumItemTuple &) override {} void visit (HIR::EnumItemStruct &) override {} - void visit (HIR::EnumItemDiscriminant &) override {} void visit (HIR::TypePathSegmentFunction &) override {} void visit (HIR::TypePath &) override {} void visit (HIR::QualifiedPathInType &) override {} diff --git a/gcc/rust/backend/rust-compile-stmt.h b/gcc/rust/backend/rust-compile-stmt.h index 7ccc356b8bad..845b6ab048fa 100644 --- a/gcc/rust/backend/rust-compile-stmt.h +++ b/gcc/rust/backend/rust-compile-stmt.h @@ -38,7 +38,6 @@ class CompileStmt : private HIRCompileBase, protected HIR::HIRStmtVisitor void visit (HIR::EnumItem &) override {} void visit (HIR::EnumItemTuple &) override {} void visit (HIR::EnumItemStruct &) override {} - void visit (HIR::EnumItemDiscriminant &) override {} void visit (HIR::TypePathSegmentFunction &) override {} void visit (HIR::TypePath &) override {} void visit (HIR::QualifiedPathInType &) override {} diff --git a/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h b/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h index f538a1209a8f..c39c7538c211 100644 --- a/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h +++ b/gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h @@ -134,7 +134,6 @@ class ExprStmtBuilder final : public AbstractExprBuilder, void visit (HIR::EnumItemStruct &a_struct) override {} void visit (HIR::EnumItem &item) override {} void visit (HIR::TupleStruct &tuple_struct) override {} - void visit (HIR::EnumItemDiscriminant &discriminant) override {} void visit (HIR::TypePathSegmentFunction &segment) override {} void visit (HIR::TypePath &path) override {} void visit (HIR::QualifiedPathInType &path) override {} diff --git a/gcc/rust/checks/errors/borrowck/rust-bir-builder-struct.h b/gcc/rust/checks/errors/borrowck/rust-bir-builder-struct.h index 2f0d67c50488..47aeee614fa5 100644 --- a/gcc/rust/checks/errors/borrowck/rust-bir-builder-struct.h +++ b/gcc/rust/checks/errors/borrowck/rust-bir-builder-struct.h @@ -176,7 +176,6 @@ class StructBuilder : public AbstractBuilder, public HIR::HIRFullVisitor void visit (HIR::EnumItem &item) override { rust_unreachable (); } void visit (HIR::EnumItemTuple &item) override { rust_unreachable (); } void visit (HIR::EnumItemStruct &item) override { rust_unreachable (); } - void visit (HIR::EnumItemDiscriminant &item) override { rust_unreachable (); } void visit (HIR::Enum &enum_item) override { rust_unreachable (); } void visit (HIR::Union &union_item) override { rust_unreachable (); } void visit (HIR::ConstantItem &const_item) override { rust_unreachable (); } diff --git a/gcc/rust/checks/errors/borrowck/rust-function-collector.h b/gcc/rust/checks/errors/borrowck/rust-function-collector.h index 6c1ad4445283..30026c77dd58 100644 --- a/gcc/rust/checks/errors/borrowck/rust-function-collector.h +++ b/gcc/rust/checks/errors/borrowck/rust-function-collector.h @@ -139,7 +139,6 @@ class FunctionCollector : public HIR::HIRFullVisitor void visit (HIR::EnumItem &item) override {} void visit (HIR::EnumItemTuple &item) override {} void visit (HIR::EnumItemStruct &item) override {} - void visit (HIR::EnumItemDiscriminant &item) override {} void visit (HIR::Enum &enum_item) override {} void visit (HIR::Union &union_item) override {} void visit (HIR::ConstantItem &const_item) override {} diff --git a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc index fd3de13fd4d1..e6390d4a6ed3 100644 --- a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc +++ b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc @@ -695,10 +695,6 @@ PrivacyReporter::visit (HIR::EnumItemStruct &) // TODO: Check the type } -void -PrivacyReporter::visit (HIR::EnumItemDiscriminant &) -{} - void PrivacyReporter::visit (HIR::Enum &) {} diff --git a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h index 505c8673c571..b49470b83e40 100644 --- a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h +++ b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h @@ -130,7 +130,6 @@ types virtual void visit (HIR::EnumItemStruct &); virtual void visit (HIR::EnumItem &item); virtual void visit (HIR::TupleStruct &tuple_struct); - virtual void visit (HIR::EnumItemDiscriminant &); virtual void visit (HIR::TypePathSegmentFunction &segment); virtual void visit (HIR::TypePath &path); virtual void visit (HIR::QualifiedPathInType &path); diff --git a/gcc/rust/checks/errors/rust-const-checker.cc b/gcc/rust/checks/errors/rust-const-checker.cc index 80b63982c12d..10e5f8022ec7 100644 --- a/gcc/rust/checks/errors/rust-const-checker.cc +++ b/gcc/rust/checks/errors/rust-const-checker.cc @@ -631,16 +631,6 @@ void ConstChecker::visit (EnumItemStruct &) {} -void -ConstChecker::visit (EnumItemDiscriminant &item) -{ - const_context.enter (item.get_mappings ().get_hirid ()); - - item.get_discriminant_expression ().accept_vis (*this); - - const_context.exit (); -} - void ConstChecker::visit (Enum &enum_item) { diff --git a/gcc/rust/checks/errors/rust-const-checker.h b/gcc/rust/checks/errors/rust-const-checker.h index 92a5c49bb51c..8fc72e381bb1 100644 --- a/gcc/rust/checks/errors/rust-const-checker.h +++ b/gcc/rust/checks/errors/rust-const-checker.h @@ -150,7 +150,6 @@ class ConstChecker : public HIRFullVisitor virtual void visit (EnumItem &item) override; virtual void visit (EnumItemTuple &item) override; virtual void visit (EnumItemStruct &item) override; - virtual void visit (EnumItemDiscriminant &item) override; virtual void visit (Enum &enum_item) override; virtual void visit (Union &union_item) override; virtual void visit (ConstantItem &const_item) override; diff --git a/gcc/rust/checks/errors/rust-hir-pattern-analysis.cc b/gcc/rust/checks/errors/rust-hir-pattern-analysis.cc index 257f4cd0c08c..0e7851ff7e85 100644 --- a/gcc/rust/checks/errors/rust-hir-pattern-analysis.cc +++ b/gcc/rust/checks/errors/rust-hir-pattern-analysis.cc @@ -495,10 +495,6 @@ void PatternChecker::visit (EnumItemStruct &) {} -void -PatternChecker::visit (EnumItemDiscriminant &) -{} - void PatternChecker::visit (Enum &) {} diff --git a/gcc/rust/checks/errors/rust-hir-pattern-analysis.h b/gcc/rust/checks/errors/rust-hir-pattern-analysis.h index 2171340d4ad7..9691438e3255 100644 --- a/gcc/rust/checks/errors/rust-hir-pattern-analysis.h +++ b/gcc/rust/checks/errors/rust-hir-pattern-analysis.h @@ -123,7 +123,6 @@ class PatternChecker : public HIR::HIRFullVisitor virtual void visit (EnumItem &item) override; virtual void visit (EnumItemTuple &item) override; virtual void visit (EnumItemStruct &item) override; - virtual void visit (EnumItemDiscriminant &item) override; virtual void visit (Enum &enum_item) override; virtual void visit (Union &union_item) override; virtual void visit (ConstantItem &const_item) override; diff --git a/gcc/rust/checks/errors/rust-unsafe-checker.cc b/gcc/rust/checks/errors/rust-unsafe-checker.cc index df775b24d361..a9643a8e7298 100644 --- a/gcc/rust/checks/errors/rust-unsafe-checker.cc +++ b/gcc/rust/checks/errors/rust-unsafe-checker.cc @@ -749,10 +749,6 @@ void UnsafeChecker::visit (EnumItemStruct &) {} -void -UnsafeChecker::visit (EnumItemDiscriminant &) -{} - void UnsafeChecker::visit (Enum &) {} diff --git a/gcc/rust/checks/errors/rust-unsafe-checker.h b/gcc/rust/checks/errors/rust-unsafe-checker.h index 9f1d8c7f8711..d7f4bf484716 100644 --- a/gcc/rust/checks/errors/rust-unsafe-checker.h +++ b/gcc/rust/checks/errors/rust-unsafe-checker.h @@ -131,7 +131,6 @@ class UnsafeChecker : public HIRFullVisitor virtual void visit (EnumItem &item) override; virtual void visit (EnumItemTuple &item) override; virtual void visit (EnumItemStruct &item) override; - virtual void visit (EnumItemDiscriminant &item) override; virtual void visit (Enum &enum_item) override; virtual void visit (Union &union_item) override; virtual void visit (ConstantItem &const_item) override; diff --git a/gcc/rust/hir/rust-hir-dump.cc b/gcc/rust/hir/rust-hir-dump.cc index b6dcf184ae4e..785572281d0a 100644 --- a/gcc/rust/hir/rust-hir-dump.cc +++ b/gcc/rust/hir/rust-hir-dump.cc @@ -1814,18 +1814,6 @@ Dump::visit (EnumItemStruct &e) end ("EnumItemStruct"); } -void -Dump::visit (EnumItemDiscriminant &e) -{ - begin ("EnumItemDiscriminant"); - - do_enumitem (e); - - visit_field ("discriminant", e.get_discriminant_expression ()); - - end ("EnumItemDiscriminant"); -} - void Dump::visit (Enum &e) { diff --git a/gcc/rust/hir/rust-hir-dump.h b/gcc/rust/hir/rust-hir-dump.h index 49ac4051541d..e6e7a5c6c346 100644 --- a/gcc/rust/hir/rust-hir-dump.h +++ b/gcc/rust/hir/rust-hir-dump.h @@ -187,7 +187,6 @@ class Dump : public HIRFullVisitor virtual void visit (EnumItem &) override; virtual void visit (EnumItemTuple &) override; virtual void visit (EnumItemStruct &) override; - virtual void visit (EnumItemDiscriminant &) override; virtual void visit (Enum &) override; virtual void visit (Union &) override; diff --git a/gcc/rust/hir/tree/rust-hir-full-decls.h b/gcc/rust/hir/tree/rust-hir-full-decls.h index 6eae99d58f6e..5b2e5234ae3a 100644 --- a/gcc/rust/hir/tree/rust-hir-full-decls.h +++ b/gcc/rust/hir/tree/rust-hir-full-decls.h @@ -161,7 +161,6 @@ class TupleStruct; class EnumItem; class EnumItemTuple; class EnumItemStruct; -class EnumItemDiscriminant; class Enum; class Union; class ConstantItem; diff --git a/gcc/rust/hir/tree/rust-hir-item.cc b/gcc/rust/hir/tree/rust-hir-item.cc index 14f53ce3771d..5bf54a74991c 100644 --- a/gcc/rust/hir/tree/rust-hir-item.cc +++ b/gcc/rust/hir/tree/rust-hir-item.cc @@ -447,31 +447,6 @@ EnumItemStruct::EnumItemStruct (Analysis::NodeMapping mappings, struct_fields (std::move (struct_fields)) {} -EnumItemDiscriminant::EnumItemDiscriminant (Analysis::NodeMapping mappings, - Identifier variant_name, - std::unique_ptr expr, - AST::AttrVec outer_attrs, - location_t locus) - : EnumItem (std::move (mappings), std::move (variant_name), - std::move (outer_attrs), locus), - expression (std::move (expr)) -{} - -EnumItemDiscriminant::EnumItemDiscriminant (EnumItemDiscriminant const &other) - : EnumItem (other), expression (other.expression->clone_expr ()) -{} - -EnumItemDiscriminant & -EnumItemDiscriminant::operator= (EnumItemDiscriminant const &other) -{ - EnumItem::operator= (other); - expression = other.expression->clone_expr (); - // variant_name = other.variant_name; - // outer_attrs = other.outer_attrs; - - return *this; -} - Enum::Enum (Analysis::NodeMapping mappings, Identifier enum_name, Visibility vis, std::vector> generic_params, diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h index 0a59a537da1c..0b9b907ce2c5 100644 --- a/gcc/rust/hir/tree/rust-hir-item.h +++ b/gcc/rust/hir/tree/rust-hir-item.h @@ -1571,51 +1571,6 @@ class EnumItemStruct : public EnumItem } }; -// A discriminant (numbered enum) item used in an "enum" tagged union -class EnumItemDiscriminant : public EnumItem -{ - std::unique_ptr expression; - -public: - EnumItemDiscriminant (Analysis::NodeMapping mappings, Identifier variant_name, - std::unique_ptr expr, AST::AttrVec outer_attrs, - location_t locus); - - // Copy constructor with clone - EnumItemDiscriminant (EnumItemDiscriminant const &other); - - // Overloaded assignment operator to clone - EnumItemDiscriminant &operator= (EnumItemDiscriminant const &other); - - // move constructors - EnumItemDiscriminant (EnumItemDiscriminant &&other) = default; - EnumItemDiscriminant &operator= (EnumItemDiscriminant &&other) = default; - - EnumItemKind get_enum_item_kind () const override - { - return EnumItemKind::Discriminant; - } - - std::string as_string () const override; - - void accept_vis (HIRFullVisitor &vis) override; - void accept_vis (HIRStmtVisitor &vis) override; - - Expr &get_discriminant_expression () { return *expression; } - - std::unique_ptr take_discriminant_expression () - { - return std::move (expression); - } - -protected: - // Clone function implementation as (not pure) virtual method - EnumItemDiscriminant *clone_item_impl () const override - { - return new EnumItemDiscriminant (*this); - } -}; - // HIR node for Rust "enum" - tagged union class Enum : public VisItem { diff --git a/gcc/rust/hir/tree/rust-hir-visitor.h b/gcc/rust/hir/tree/rust-hir-visitor.h index b14547bc7128..856d622fed7f 100644 --- a/gcc/rust/hir/tree/rust-hir-visitor.h +++ b/gcc/rust/hir/tree/rust-hir-visitor.h @@ -101,7 +101,6 @@ class HIRFullVisitor virtual void visit (EnumItem &item) = 0; virtual void visit (EnumItemTuple &item) = 0; virtual void visit (EnumItemStruct &item) = 0; - virtual void visit (EnumItemDiscriminant &item) = 0; virtual void visit (Enum &enum_item) = 0; virtual void visit (Union &union_item) = 0; virtual void visit (ConstantItem &const_item) = 0; @@ -240,7 +239,6 @@ class HIRFullVisitorBase : public HIRFullVisitor virtual void visit (EnumItem &) override {} virtual void visit (EnumItemTuple &) override {} virtual void visit (EnumItemStruct &) override {} - virtual void visit (EnumItemDiscriminant &) override {} virtual void visit (Enum &) override {} virtual void visit (Union &) override {} virtual void visit (ConstantItem &) override {} @@ -369,7 +367,6 @@ class HIRStmtVisitor virtual void visit (EnumItemStruct &) = 0; virtual void visit (EnumItem &item) = 0; virtual void visit (TupleStruct &tuple_struct) = 0; - virtual void visit (EnumItemDiscriminant &) = 0; virtual void visit (TypePathSegmentFunction &segment) = 0; virtual void visit (TypePath &path) = 0; virtual void visit (QualifiedPathInType &path) = 0; diff --git a/gcc/rust/hir/tree/rust-hir.cc b/gcc/rust/hir/tree/rust-hir.cc index 7dba77ebc3a1..6d7f246f4fd9 100644 --- a/gcc/rust/hir/tree/rust-hir.cc +++ b/gcc/rust/hir/tree/rust-hir.cc @@ -3182,17 +3182,6 @@ StructField::as_string () const return str; } -std::string -EnumItemDiscriminant::as_string () const -{ - std::string str = EnumItem::as_string (); - - // add equal and expression - str += " = " + expression->as_string (); - - return str; -} - std::string ExternalItem::as_string () const { @@ -4271,12 +4260,6 @@ EnumItemStruct::accept_vis (HIRFullVisitor &vis) vis.visit (*this); } -void -EnumItemDiscriminant::accept_vis (HIRFullVisitor &vis) -{ - vis.visit (*this); -} - void Enum::accept_vis (HIRFullVisitor &vis) { @@ -4625,12 +4608,6 @@ ExternalStaticItem::accept_vis (HIRExternalItemVisitor &vis) vis.visit (*this); } -void -EnumItemDiscriminant::accept_vis (HIRStmtVisitor &vis) -{ - vis.visit (*this); -} - void EnumItemStruct::accept_vis (HIRStmtVisitor &vis) { diff --git a/gcc/rust/typecheck/rust-hir-type-check-enumitem.cc b/gcc/rust/typecheck/rust-hir-type-check-enumitem.cc index 527c8dfbbeac..4a5b17688930 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-enumitem.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-enumitem.cc @@ -46,10 +46,6 @@ TypeCheckEnumItem::Resolve (HIR::EnumItem &item, int64_t last_discriminant) case HIR::EnumItem::EnumItemKind::Struct: resolver.visit (static_cast (item)); break; - - case HIR::EnumItem::EnumItemKind::Discriminant: - resolver.visit (static_cast (item)); - break; } return resolver.variant; } @@ -104,51 +100,6 @@ TypeCheckEnumItem::visit (HIR::EnumItem &item) std::move (discim_expr)); } -void -TypeCheckEnumItem::visit (HIR::EnumItemDiscriminant &item) -{ - if (last_discriminant == INT64_MAX) - rust_error_at (item.get_locus (), "discriminant too big"); - - auto &discriminant = item.get_discriminant_expression (); - auto capacity_type = TypeCheckExpr::Resolve (discriminant); - if (capacity_type->get_kind () == TyTy::TypeKind::ERROR) - return; - - TyTy::ISizeType *expected_ty - = new TyTy::ISizeType (discriminant.get_mappings ().get_hirid ()); - context->insert_type (discriminant.get_mappings (), expected_ty); - - unify_site (item.get_mappings ().get_hirid (), - TyTy::TyWithLocation (expected_ty), - TyTy::TyWithLocation (capacity_type), item.get_locus ()); - - tl::optional canonical_path; - - if (flag_name_resolution_2_0) - { - auto &nr_ctx - = Resolver2_0::ImmutableNameResolutionContext::get ().resolver (); - - canonical_path - = nr_ctx.types.to_canonical_path (item.get_mappings ().get_nodeid ()); - } - else - { - canonical_path - = mappings.lookup_canonical_path (item.get_mappings ().get_nodeid ()); - } - - rust_assert (canonical_path.has_value ()); - - RustIdent ident{*canonical_path, item.get_locus ()}; - variant - = new TyTy::VariantDef (item.get_mappings ().get_hirid (), - item.get_mappings ().get_defid (), - item.get_identifier ().as_string (), ident, - item.get_discriminant_expression ().clone_expr ()); -} - void TypeCheckEnumItem::visit (HIR::EnumItemTuple &item) { diff --git a/gcc/rust/typecheck/rust-hir-type-check-enumitem.h b/gcc/rust/typecheck/rust-hir-type-check-enumitem.h index baed198d4343..f9726f68f411 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-enumitem.h +++ b/gcc/rust/typecheck/rust-hir-type-check-enumitem.h @@ -33,7 +33,6 @@ class TypeCheckEnumItem : public TypeCheckBase protected: void visit (HIR::EnumItem &item); - void visit (HIR::EnumItemDiscriminant &item); void visit (HIR::EnumItemTuple &item); void visit (HIR::EnumItemStruct &item); diff --git a/gcc/rust/typecheck/rust-hir-type-check-stmt.h b/gcc/rust/typecheck/rust-hir-type-check-stmt.h index 7df221f56e51..d582ce4a9a39 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-stmt.h +++ b/gcc/rust/typecheck/rust-hir-type-check-stmt.h @@ -64,7 +64,6 @@ class TypeCheckStmt : private TypeCheckBase, private HIR::HIRStmtVisitor void visit (HIR::EnumItemTuple &) override {} void visit (HIR::EnumItemStruct &) override {} void visit (HIR::EnumItem &) override {} - void visit (HIR::EnumItemDiscriminant &) override {} private: TypeCheckStmt () : TypeCheckBase (), infered (nullptr) {} From fa4f2d9daf6e26507fbbdbbb7dd46b58554984de Mon Sep 17 00:00:00 2001 From: varun-r-mallya Date: Sat, 5 Apr 2025 17:41:44 +0530 Subject: [PATCH 3/3] gccrs: Remove Discriminant variant from EnumItem and related code * ast/rust-item.h (EnumItem::Kind): Remove Discriminant enum value. * checks/errors/privacy/rust-reachability.cc (ReachabilityVisitor::visit): Remove Discriminant case from enum item handling. * expand/rust-derive-clone.cc (DeriveClone::visit_enum): Remove Discriminant case from enum derivation. * expand/rust-derive-eq.cc (DeriveEq::visit_enum): Remove Discriminant case from equality derivation. * expand/rust-derive-hash.cc (DeriveHash::visit_enum): Remove Discriminant case from hash derivation. * expand/rust-derive-partial-eq.cc (DerivePartialEq::visit_enum): Remove Discriminant case from partial equality derivation. * hir/rust-hir-dump.cc (Dump::do_enumitem): Remove Discriminant variant from dump output. * hir/tree/rust-hir-item.h (EnumItem::EnumItemKind): Remove Discriminant enum variant. * hir/tree/rust-hir.cc (EnumItem::as_string): Remove string representation for Discriminant variant. Addresses #3340 Signed-off-by: varun-r-mallya --- gcc/rust/ast/rust-item.h | 2 -- gcc/rust/checks/errors/privacy/rust-reachability.cc | 1 - gcc/rust/expand/rust-derive-clone.cc | 3 --- gcc/rust/expand/rust-derive-eq.cc | 3 --- gcc/rust/expand/rust-derive-hash.cc | 4 ---- gcc/rust/expand/rust-derive-partial-eq.cc | 3 --- gcc/rust/hir/rust-hir-dump.cc | 3 --- gcc/rust/hir/tree/rust-hir-item.h | 3 +-- gcc/rust/hir/tree/rust-hir.cc | 3 --- 9 files changed, 1 insertion(+), 24 deletions(-) diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h index e918197f5332..47f082ebf176 100644 --- a/gcc/rust/ast/rust-item.h +++ b/gcc/rust/ast/rust-item.h @@ -2040,8 +2040,6 @@ class EnumItem : public VisItem // the base EnumItem class // // gccrs#3340 - - Discriminant, }; virtual ~EnumItem () {} diff --git a/gcc/rust/checks/errors/privacy/rust-reachability.cc b/gcc/rust/checks/errors/privacy/rust-reachability.cc index a6ef6c451440..d610000e4a68 100644 --- a/gcc/rust/checks/errors/privacy/rust-reachability.cc +++ b/gcc/rust/checks/errors/privacy/rust-reachability.cc @@ -178,7 +178,6 @@ ReachabilityVisitor::visit (HIR::Enum &enum_item) } // Nothing nested to visit in that case case HIR::EnumItem::Named: - case HIR::EnumItem::Discriminant: break; } } diff --git a/gcc/rust/expand/rust-derive-clone.cc b/gcc/rust/expand/rust-derive-clone.cc index 00abb593c17e..813982db9e74 100644 --- a/gcc/rust/expand/rust-derive-clone.cc +++ b/gcc/rust/expand/rust-derive-clone.cc @@ -322,9 +322,6 @@ DeriveClone::visit_enum (Enum &item) // Identifiers and discriminated variants are the same for a clone - we // just return the same variant case EnumItem::Kind::Identifier: - case EnumItem::Kind::Discriminant: - cases.emplace_back (clone_enum_identifier (path, variant)); - break; case EnumItem::Kind::Tuple: cases.emplace_back ( clone_enum_tuple (path, static_cast (*variant))); diff --git a/gcc/rust/expand/rust-derive-eq.cc b/gcc/rust/expand/rust-derive-eq.cc index dc173defd67e..454d7da6e1fc 100644 --- a/gcc/rust/expand/rust-derive-eq.cc +++ b/gcc/rust/expand/rust-derive-eq.cc @@ -173,9 +173,6 @@ DeriveEq::visit_enum (Enum &item) switch (variant->get_enum_item_kind ()) { case EnumItem::Kind::Identifier: - case EnumItem::Kind::Discriminant: - // nothing to do as they contain no inner types - continue; case EnumItem::Kind::Tuple: { auto &tuple = static_cast (*variant); diff --git a/gcc/rust/expand/rust-derive-hash.cc b/gcc/rust/expand/rust-derive-hash.cc index 0c9b0f7b1057..585ccb576305 100644 --- a/gcc/rust/expand/rust-derive-hash.cc +++ b/gcc/rust/expand/rust-derive-hash.cc @@ -252,10 +252,6 @@ DeriveHash::visit_enum (Enum &item) switch (variant->get_enum_item_kind ()) { case EnumItem::Kind::Identifier: - case EnumItem::Kind::Discriminant: - // nothing to do in these cases, as we just need to hash the - // discriminant value - continue; case EnumItem::Kind::Tuple: cases.emplace_back ( match_enum_tuple (variant_path, diff --git a/gcc/rust/expand/rust-derive-partial-eq.cc b/gcc/rust/expand/rust-derive-partial-eq.cc index ff66faabc781..27b5282324f6 100644 --- a/gcc/rust/expand/rust-derive-partial-eq.cc +++ b/gcc/rust/expand/rust-derive-partial-eq.cc @@ -266,9 +266,6 @@ DerivePartialEq::visit_enum (Enum &item) switch (variant->get_enum_item_kind ()) { case EnumItem::Kind::Identifier: - case EnumItem::Kind::Discriminant: - cases.emplace_back (match_enum_identifier (variant_path, variant)); - break; case EnumItem::Kind::Tuple: cases.emplace_back ( match_enum_tuple (variant_path, diff --git a/gcc/rust/hir/rust-hir-dump.cc b/gcc/rust/hir/rust-hir-dump.cc index 785572281d0a..208926904691 100644 --- a/gcc/rust/hir/rust-hir-dump.cc +++ b/gcc/rust/hir/rust-hir-dump.cc @@ -511,9 +511,6 @@ Dump::do_enumitem (EnumItem &e) case EnumItem::EnumItemKind::Struct: str = "[Struct variant]"; break; - case EnumItem::EnumItemKind::Discriminant: - str = "[Discriminant variant]"; - break; } put_field ("item_kind", str); } diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h index 0b9b907ce2c5..169f62633202 100644 --- a/gcc/rust/hir/tree/rust-hir-item.h +++ b/gcc/rust/hir/tree/rust-hir-item.h @@ -1472,8 +1472,7 @@ class EnumItem : public Item { Named, Tuple, - Struct, - Discriminant, + Struct }; EnumItem (Analysis::NodeMapping mappings, Identifier variant_name, diff --git a/gcc/rust/hir/tree/rust-hir.cc b/gcc/rust/hir/tree/rust-hir.cc index 6d7f246f4fd9..60ac91b9346c 100644 --- a/gcc/rust/hir/tree/rust-hir.cc +++ b/gcc/rust/hir/tree/rust-hir.cc @@ -3060,9 +3060,6 @@ EnumItem::as_string () const case Struct: str += "[Struct variant]"; break; - case Discriminant: - str += "[Discriminant variant]"; - break; } return str;