diff options
author | Philip Herron <herron.philip@googlemail.com> | 2023-05-30 13:45:14 +0100 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 18:37:22 +0100 |
commit | 422244101eedcd216e209e98ada698839de45aac (patch) | |
tree | e003144cfb7e91710f1b73ec95fcd59b82b6b6b0 | |
parent | e07cb0b07d50ffa6b8533c4e0f65b6a4829d2823 (diff) | |
download | gcc-422244101eedcd216e209e98ada698839de45aac.zip gcc-422244101eedcd216e209e98ada698839de45aac.tar.gz gcc-422244101eedcd216e209e98ada698839de45aac.tar.bz2 |
gccrs: Fix missing pop of name scope at the end of Trait Impl
This adds the missing label scope and fixes the missing pop of the name
scope at the end of the resolution for a TraitImpl.
gcc/rust/ChangeLog:
* resolve/rust-ast-resolve-item.cc (ResolveItem::visit): fix missing pop
Signed-off-by: Philip Herron <herron.philip@googlemail.com>
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-item.cc | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-item.cc b/gcc/rust/resolve/rust-ast-resolve-item.cc index dd8b0a9..8d29e9b 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.cc +++ b/gcc/rust/resolve/rust-ast-resolve-item.cc @@ -699,8 +699,10 @@ ResolveItem::visit (AST::TraitImpl &impl_block) resolver->get_name_scope ().push (scope_node_id); resolver->get_type_scope ().push (scope_node_id); + resolver->get_label_scope ().push (scope_node_id); resolver->push_new_name_rib (resolver->get_name_scope ().peek ()); resolver->push_new_type_rib (resolver->get_type_scope ().peek ()); + resolver->push_new_label_rib (resolver->get_type_scope ().peek ()); if (impl_block.has_generics ()) for (auto &generic : impl_block.get_generic_params ()) @@ -714,8 +716,9 @@ ResolveItem::visit (AST::TraitImpl &impl_block) NodeId trait_resolved_node = ResolveType::go (&impl_block.get_trait_path ()); if (trait_resolved_node == UNKNOWN_NODEID) { - resolver->get_type_scope ().pop (); resolver->get_name_scope ().pop (); + resolver->get_type_scope ().pop (); + resolver->get_label_scope ().pop (); return; } @@ -723,8 +726,9 @@ ResolveItem::visit (AST::TraitImpl &impl_block) NodeId type_resolved_node = ResolveType::go (impl_block.get_type ().get ()); if (type_resolved_node == UNKNOWN_NODEID) { - resolver->get_type_scope ().pop (); resolver->get_name_scope ().pop (); + resolver->get_type_scope ().pop (); + resolver->get_label_scope ().pop (); return; } @@ -792,9 +796,12 @@ ResolveItem::visit (AST::TraitImpl &impl_block) resolve_impl_item (impl_item.get (), impl_prefix, cpath); } - resolver->get_type_scope ().peek ()->clear_name ( - Self, impl_block.get_type ()->get_node_id ()); + Rib *r = resolver->get_type_scope ().peek (); + r->clear_name (Self, impl_block.get_type ()->get_node_id ()); + + resolver->get_name_scope ().pop (); resolver->get_type_scope ().pop (); + resolver->get_label_scope ().pop (); } void |