[gcc r14-7623] gccrs: Fix missing pop of name scope at the end of Trait Impl
Arthur Cohen
cohenarthur@gcc.gnu.org
Tue Jan 16 17:46:07 GMT 2024
https://gcc.gnu.org/g:422244101eedcd216e209e98ada698839de45aac
commit r14-7623-g422244101eedcd216e209e98ada698839de45aac
Author: Philip Herron <herron.philip@googlemail.com>
Date: Tue May 30 13:45:14 2023 +0100
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>
Diff:
---
gcc/rust/resolve/rust-ast-resolve-item.cc | 15 +++++++++++----
1 file 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 dd8b0a97541..8d29e9bcd25 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
More information about the Gcc-cvs
mailing list