https://gcc.gnu.org/g:11d46d45c3b61169b4466d7bcf2cabb7e79dbb07

commit 11d46d45c3b61169b4466d7bcf2cabb7e79dbb07
Author: Owen Avery <powerboat9.ga...@gmail.com>
Date:   Fri May 2 18:37:45 2025 -0400

    nr2.0: Adjust enum item visitors
    
    gcc/rust/ChangeLog:
    
            * ast/rust-ast-visitor.cc
            (DefaultASTVisitor::visit): Make call to EnumItem visitor from
            EnumItem derived class visitors non-virtual.
            * ast/rust-collect-lang-items.cc
            (CollectLangItems::visit): Handle visitation of classes derived
            from EnumItem.
            * ast/rust-collect-lang-items.h
            (CollectLangItems::visit): Likewise.
            * resolve/rust-toplevel-name-resolver-2.0.cc
            (TopLevel::visit): Call DefaultResolver::visit on EnumItem
            instances.
    
    Signed-off-by: Owen Avery <powerboat9.ga...@gmail.com>

Diff:
---
 gcc/rust/ast/rust-ast-visitor.cc                   |  6 +++---
 gcc/rust/ast/rust-collect-lang-items.cc            | 24 ++++++++++++++++++++++
 gcc/rust/ast/rust-collect-lang-items.h             |  3 +++
 .../resolve/rust-toplevel-name-resolver-2.0.cc     |  8 ++++++++
 4 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/gcc/rust/ast/rust-ast-visitor.cc b/gcc/rust/ast/rust-ast-visitor.cc
index 7584d1af5bb1..105417baa636 100644
--- a/gcc/rust/ast/rust-ast-visitor.cc
+++ b/gcc/rust/ast/rust-ast-visitor.cc
@@ -922,7 +922,7 @@ DefaultASTVisitor::visit (AST::EnumItem &item)
 void
 DefaultASTVisitor::visit (AST::EnumItemTuple &item)
 {
-  visit (reinterpret_cast<EnumItem &> (item));
+  DefaultASTVisitor::visit (reinterpret_cast<EnumItem &> (item));
   for (auto &field : item.get_tuple_fields ())
     visit (field);
 }
@@ -930,7 +930,7 @@ DefaultASTVisitor::visit (AST::EnumItemTuple &item)
 void
 DefaultASTVisitor::visit (AST::EnumItemStruct &item)
 {
-  visit (reinterpret_cast<EnumItem &> (item));
+  DefaultASTVisitor::visit (reinterpret_cast<EnumItem &> (item));
   for (auto &field : item.get_struct_fields ())
     visit (field);
 }
@@ -938,7 +938,7 @@ DefaultASTVisitor::visit (AST::EnumItemStruct &item)
 void
 DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
 {
-  visit (reinterpret_cast<EnumItem &> (item));
+  DefaultASTVisitor::visit (reinterpret_cast<EnumItem &> (item));
   visit (item.get_expr ());
 }
 
diff --git a/gcc/rust/ast/rust-collect-lang-items.cc 
b/gcc/rust/ast/rust-collect-lang-items.cc
index cd6be7fbeb9c..306c6f747e2b 100644
--- a/gcc/rust/ast/rust-collect-lang-items.cc
+++ b/gcc/rust/ast/rust-collect-lang-items.cc
@@ -109,5 +109,29 @@ CollectLangItems::visit (AST::EnumItem &item)
   DefaultASTVisitor::visit (item);
 }
 
+void
+CollectLangItems::visit (AST::EnumItemTuple &item)
+{
+  maybe_add_lang_item (item);
+
+  DefaultASTVisitor::visit (item);
+}
+
+void
+CollectLangItems::visit (AST::EnumItemStruct &item)
+{
+  maybe_add_lang_item (item);
+
+  DefaultASTVisitor::visit (item);
+}
+
+void
+CollectLangItems::visit (AST::EnumItemDiscriminant &item)
+{
+  maybe_add_lang_item (item);
+
+  DefaultASTVisitor::visit (item);
+}
+
 } // namespace AST
 } // namespace Rust
diff --git a/gcc/rust/ast/rust-collect-lang-items.h 
b/gcc/rust/ast/rust-collect-lang-items.h
index ddb34a914ed7..ddc7b51313bd 100644
--- a/gcc/rust/ast/rust-collect-lang-items.h
+++ b/gcc/rust/ast/rust-collect-lang-items.h
@@ -50,6 +50,9 @@ public:
   void visit (AST::Function &item) override;
   void visit (AST::StructStruct &item) override;
   void visit (AST::EnumItem &item) override;
+  void visit (AST::EnumItemTuple &item) override;
+  void visit (AST::EnumItemStruct &item) override;
+  void visit (AST::EnumItemDiscriminant &item) override;
 
 private:
   template <typename T> void maybe_add_lang_item (const T &item);
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 3ec06aaf0183..d3ae797655da 100644
--- a/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
@@ -374,24 +374,32 @@ void
 TopLevel::visit (AST::EnumItem &variant)
 {
   insert_enum_variant_or_error_out (variant.get_identifier (), variant);
+
+  DefaultResolver::visit (variant);
 }
 
 void
 TopLevel::visit (AST::EnumItemTuple &variant)
 {
   insert_enum_variant_or_error_out (variant.get_identifier (), variant);
+
+  DefaultResolver::visit (variant);
 }
 
 void
 TopLevel::visit (AST::EnumItemStruct &variant)
 {
   insert_enum_variant_or_error_out (variant.get_identifier (), variant);
+
+  DefaultResolver::visit (variant);
 }
 
 void
 TopLevel::visit (AST::EnumItemDiscriminant &variant)
 {
   insert_or_error_out (variant.get_identifier (), variant, Namespace::Types);
+
+  DefaultResolver::visit (variant);
 }
 
 void

Reply via email to