]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Fix missing pop of name scope at the end of Trait Impl
authorPhilip Herron <herron.philip@googlemail.com>
Tue, 30 May 2023 12:45:14 +0000 (13:45 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 17:37:22 +0000 (18:37 +0100)
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>
gcc/rust/resolve/rust-ast-resolve-item.cc

index dd8b0a9754141f90281e6756d196e890b85e3713..8d29e9bcd25d9e18442f89f68308aafd1104c4bf 100644 (file)
@@ -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