Skip to content

Commit 0d7c150

Browse files
powerboat9P-E-P
authored andcommitted
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 <[email protected]>
1 parent c185688 commit 0d7c150

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

gcc/rust/ast/rust-ast-visitor.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,7 @@ DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
392392
{
393393
visit_outer_attrs (expr);
394394
visit_inner_attrs (expr);
395+
visit (expr.get_struct_name ());
395396
if (expr.has_struct_base ())
396397
visit (expr.get_struct_base ());
397398
for (auto &field : expr.get_fields ())
@@ -403,6 +404,7 @@ DefaultASTVisitor::visit (AST::StructExprStructBase &expr)
403404
{
404405
visit_outer_attrs (expr);
405406
visit_inner_attrs (expr);
407+
visit (expr.get_struct_name ());
406408
visit (expr.get_struct_base ());
407409
}
408410

gcc/rust/resolve/rust-late-name-resolver-2.0.cc

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,10 @@ Late::visit (AST::StructStruct &s)
351351
void
352352
Late::visit (AST::StructExprStruct &s)
353353
{
354+
visit_outer_attrs (s);
355+
visit_inner_attrs (s);
356+
DefaultResolver::visit (s.get_struct_name ());
357+
354358
auto resolved
355359
= ctx.resolve_path (s.get_struct_name ().get_segments (), Namespace::Types);
356360

@@ -361,24 +365,34 @@ Late::visit (AST::StructExprStruct &s)
361365
void
362366
Late::visit (AST::StructExprStructBase &s)
363367
{
368+
visit_outer_attrs (s);
369+
visit_inner_attrs (s);
370+
DefaultResolver::visit (s.get_struct_name ());
371+
visit (s.get_struct_base ());
372+
364373
auto resolved
365374
= ctx.resolve_path (s.get_struct_name ().get_segments (), Namespace::Types);
366375

367376
ctx.map_usage (Usage (s.get_struct_name ().get_node_id ()),
368377
Definition (resolved->get_node_id ()));
369-
DefaultResolver::visit (s);
370378
}
371379

372380
void
373381
Late::visit (AST::StructExprStructFields &s)
374382
{
383+
visit_outer_attrs (s);
384+
visit_inner_attrs (s);
385+
DefaultResolver::visit (s.get_struct_name ());
386+
if (s.has_struct_base ())
387+
visit (s.get_struct_base ());
388+
for (auto &field : s.get_fields ())
389+
visit (field);
390+
375391
auto resolved
376392
= ctx.resolve_path (s.get_struct_name ().get_segments (), Namespace::Types);
377393

378394
ctx.map_usage (Usage (s.get_struct_name ().get_node_id ()),
379395
Definition (resolved->get_node_id ()));
380-
381-
DefaultResolver::visit (s);
382396
}
383397

384398
// needed because Late::visit (AST::GenericArg &) is non-virtual

gcc/testsuite/rust/compile/nr2/exclude

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ struct-expr-parse.rs
3232
undeclared_label.rs
3333
use_1.rs
3434
while_break_expr.rs
35-
issue-3139-2.rs
3635
issue-2905-2.rs
3736
issue-266.rs
3837
derive_clone_enum3.rs
@@ -57,8 +56,4 @@ torture/name_resolve1.rs
5756
torture/nested_struct1.rs
5857
torture/struct_init_3.rs
5958
torture/uninit-intrinsic-1.rs
60-
torture/generics1.rs
61-
torture/generics10.rs
62-
torture/generics13.rs
63-
torture/generics6.rs
6459
# please don't delete the trailing newline

0 commit comments

Comments
 (0)