aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Herron <herron.philip@googlemail.com>2023-05-30 13:45:14 +0100
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 18:37:22 +0100
commit422244101eedcd216e209e98ada698839de45aac (patch)
treee003144cfb7e91710f1b73ec95fcd59b82b6b6b0
parente07cb0b07d50ffa6b8533c4e0f65b6a4829d2823 (diff)
downloadgcc-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.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 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