aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorOwen Avery <powerboat9.gamer@gmail.com>2025-02-09 03:28:43 -0500
committerP-E-P <32375388+P-E-P@users.noreply.github.com>2025-03-20 16:59:17 +0000
commit0d7c150572681b9feaf353ad776961d63d9fef27 (patch)
tree5122bbc66a3075ab8333100aa57fc484e41f9f2e /gcc
parentc185688b63ab8671b8552b83359b737f48fbecb6 (diff)
downloadgcc-0d7c150572681b9feaf353ad776961d63d9fef27.zip
gcc-0d7c150572681b9feaf353ad776961d63d9fef27.tar.gz
gcc-0d7c150572681b9feaf353ad776961d63d9fef27.tar.bz2
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.gamer@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/ast/rust-ast-visitor.cc2
-rw-r--r--gcc/rust/resolve/rust-late-name-resolver-2.0.cc20
-rw-r--r--gcc/testsuite/rust/compile/nr2/exclude5
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 c3f1c78..0d2dc00 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 ef09fb0..71c63f1 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 0252028..6b8cf98 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