https://gcc.gnu.org/g:f1ccfd074bc3a95eb6289c08b44f79aed8ad7b84

commit r15-8860-gf1ccfd074bc3a95eb6289c08b44f79aed8ad7b84
Author: Owen Avery <powerboat9.ga...@gmail.com>
Date:   Sun Feb 9 03:28:43 2025 -0500

    gccrs: nr2.0: Adjust visitors for struct expressions
    
    gcc/rust/ChangeLog:
    
            * ast/rust-ast-visitor.cc
            (DefaultASTVisitor::visit): Make sure to always visit the struct
            name.
            * resolve/rust-late-name-resolver-2.0.cc
            (Late::visit): Avoid visiting the struct name twice.
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/nr2/exclude: Remove entries.
    
    Signed-off-by: Owen Avery <powerboat9.ga...@gmail.com>

Diff:
---
 gcc/rust/ast/rust-ast-visitor.cc                |  2 ++
 gcc/rust/resolve/rust-late-name-resolver-2.0.cc | 20 +++++++++++++++++---
 gcc/testsuite/rust/compile/nr2/exclude          |  5 -----
 3 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/gcc/rust/ast/rust-ast-visitor.cc b/gcc/rust/ast/rust-ast-visitor.cc
index 077b41b5cacf..ba5f87bc2ebb 100644
--- a/gcc/rust/ast/rust-ast-visitor.cc
+++ b/gcc/rust/ast/rust-ast-visitor.cc
@@ -392,6 +392,7 @@ DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
 {
   visit_outer_attrs (expr);
   visit_inner_attrs (expr);
+  visit (expr.get_struct_name ());
   if (expr.has_struct_base ())
     visit (expr.get_struct_base ());
   for (auto &field : expr.get_fields ())
@@ -403,6 +404,7 @@ DefaultASTVisitor::visit (AST::StructExprStructBase &expr)
 {
   visit_outer_attrs (expr);
   visit_inner_attrs (expr);
+  visit (expr.get_struct_name ());
   visit (expr.get_struct_base ());
 }
 
diff --git a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc 
b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc
index f4ad53a02ade..a8eb3b4fa12a 100644
--- a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc
@@ -351,6 +351,10 @@ Late::visit (AST::StructStruct &s)
 void
 Late::visit (AST::StructExprStruct &s)
 {
+  visit_outer_attrs (s);
+  visit_inner_attrs (s);
+  DefaultResolver::visit (s.get_struct_name ());
+
   auto resolved
     = ctx.resolve_path (s.get_struct_name ().get_segments (), 
Namespace::Types);
 
@@ -361,24 +365,34 @@ Late::visit (AST::StructExprStruct &s)
 void
 Late::visit (AST::StructExprStructBase &s)
 {
+  visit_outer_attrs (s);
+  visit_inner_attrs (s);
+  DefaultResolver::visit (s.get_struct_name ());
+  visit (s.get_struct_base ());
+
   auto resolved
     = ctx.resolve_path (s.get_struct_name ().get_segments (), 
Namespace::Types);
 
   ctx.map_usage (Usage (s.get_struct_name ().get_node_id ()),
                 Definition (resolved->get_node_id ()));
-  DefaultResolver::visit (s);
 }
 
 void
 Late::visit (AST::StructExprStructFields &s)
 {
+  visit_outer_attrs (s);
+  visit_inner_attrs (s);
+  DefaultResolver::visit (s.get_struct_name ());
+  if (s.has_struct_base ())
+    visit (s.get_struct_base ());
+  for (auto &field : s.get_fields ())
+    visit (field);
+
   auto resolved
     = ctx.resolve_path (s.get_struct_name ().get_segments (), 
Namespace::Types);
 
   ctx.map_usage (Usage (s.get_struct_name ().get_node_id ()),
                 Definition (resolved->get_node_id ()));
-
-  DefaultResolver::visit (s);
 }
 
 // needed because Late::visit (AST::GenericArg &) is non-virtual
diff --git a/gcc/testsuite/rust/compile/nr2/exclude 
b/gcc/testsuite/rust/compile/nr2/exclude
index 0252028fb8f7..6b8cf9801c5a 100644
--- a/gcc/testsuite/rust/compile/nr2/exclude
+++ b/gcc/testsuite/rust/compile/nr2/exclude
@@ -32,7 +32,6 @@ struct-expr-parse.rs
 undeclared_label.rs
 use_1.rs
 while_break_expr.rs
-issue-3139-2.rs
 issue-2905-2.rs
 issue-266.rs
 derive_clone_enum3.rs
@@ -57,8 +56,4 @@ torture/name_resolve1.rs
 torture/nested_struct1.rs
 torture/struct_init_3.rs
 torture/uninit-intrinsic-1.rs
-torture/generics1.rs
-torture/generics10.rs
-torture/generics13.rs
-torture/generics6.rs
 # please don't delete the trailing newline

Reply via email to