diff options
author | Owen Avery <powerboat9.gamer@gmail.com> | 2025-02-09 03:28:43 -0500 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2025-03-24 13:30:42 +0100 |
commit | f1ccfd074bc3a95eb6289c08b44f79aed8ad7b84 (patch) | |
tree | 7b02f443ec416ae606a9d0f60a30bccd09033178 /gcc/rust/resolve/rust-late-name-resolver-2.0.cc | |
parent | 6b0faf2946a390d5e1493391f5f1eed71b469254 (diff) | |
download | gcc-f1ccfd074bc3a95eb6289c08b44f79aed8ad7b84.zip gcc-f1ccfd074bc3a95eb6289c08b44f79aed8ad7b84.tar.gz gcc-f1ccfd074bc3a95eb6289c08b44f79aed8ad7b84.tar.bz2 |
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.gamer@gmail.com>
Diffstat (limited to 'gcc/rust/resolve/rust-late-name-resolver-2.0.cc')
-rw-r--r-- | gcc/rust/resolve/rust-late-name-resolver-2.0.cc | 20 |
1 files changed, 17 insertions, 3 deletions
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 f4ad53a..a8eb3b4 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 |