aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Herron <herron.philip@googlemail.com>2023-05-30 13:45:14 +0100
committerPhilip Herron <philip.herron@embecosm.com>2023-05-30 16:32:08 +0000
commit85d2d5f0f80dc3229304b8c3cc2c8c6b5e2c4026 (patch)
treeef8e25e24cd2c9cb200ac656fd66b91fb1fc51ff
parent82d9bd0b033acb555b629dc527b32d4e510ba69a (diff)
downloadgcc-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.cc15
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