diff options
author | Philip Herron <herron.philip@googlemail.com> | 2023-05-30 13:45:14 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2023-05-30 16:32:08 +0000 |
commit | 85d2d5f0f80dc3229304b8c3cc2c8c6b5e2c4026 (patch) | |
tree | ef8e25e24cd2c9cb200ac656fd66b91fb1fc51ff | |
parent | 82d9bd0b033acb555b629dc527b32d4e510ba69a (diff) | |
download | gcc-85d2d5f0f80dc3229304b8c3cc2c8c6b5e2c4026.zip gcc-85d2d5f0f80dc3229304b8c3cc2c8c6b5e2c4026.tar.gz gcc-85d2d5f0f80dc3229304b8c3cc2c8c6b5e2c4026.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 9758984..e70383e 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 |