[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