[gcc r15-8439] gccrs: Use name resolver 2.0 for compiling break/continue

Arthur Cohen cohenarthur@gcc.gnu.org
Wed Mar 19 14:45:15 GMT 2025


https://gcc.gnu.org/g:15b1c03198811a88b2796605d887f141b1bce49d

commit r15-8439-g15b1c03198811a88b2796605d887f141b1bce49d
Author: Owen Avery <powerboat9.gamer@gmail.com>
Date:   Tue Oct 15 14:56:04 2024 -0400

    gccrs: Use name resolver 2.0 for compiling break/continue
    
    gcc/rust/ChangeLog:
    
            * backend/rust-compile-expr.cc
            (CompileExpr::visit): Use name resolver 2.0 to lookup label
            definitions for break and continue statements when name
            resolution 2.0 is enabled.
    
    Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>

Diff:
---
 gcc/rust/backend/rust-compile-expr.cc | 41 +++++++++++++++++++++++++++++++----
 1 file changed, 37 insertions(+), 4 deletions(-)

diff --git a/gcc/rust/backend/rust-compile-expr.cc b/gcc/rust/backend/rust-compile-expr.cc
index 6458c42d78d1..7251cc82d6ed 100644
--- a/gcc/rust/backend/rust-compile-expr.cc
+++ b/gcc/rust/backend/rust-compile-expr.cc
@@ -753,8 +753,24 @@ CompileExpr::visit (HIR::BreakExpr &expr)
   if (expr.has_label ())
     {
       NodeId resolved_node_id = UNKNOWN_NODEID;
-      if (!ctx->get_resolver ()->lookup_resolved_label (
-	    expr.get_label ().get_mappings ().get_nodeid (), &resolved_node_id))
+      if (flag_name_resolution_2_0)
+	{
+	  auto &nr_ctx
+	    = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
+
+	  if (auto id
+	      = nr_ctx.lookup (expr.get_label ().get_mappings ().get_nodeid ()))
+	    resolved_node_id = *id;
+	}
+      else
+	{
+	  NodeId tmp = UNKNOWN_NODEID;
+	  if (ctx->get_resolver ()->lookup_resolved_label (
+		expr.get_label ().get_mappings ().get_nodeid (), &tmp))
+	    resolved_node_id = tmp;
+	}
+
+      if (resolved_node_id == UNKNOWN_NODEID)
 	{
 	  rust_error_at (
 	    expr.get_label ().get_locus (),
@@ -799,8 +815,25 @@ CompileExpr::visit (HIR::ContinueExpr &expr)
   if (expr.has_label ())
     {
       NodeId resolved_node_id = UNKNOWN_NODEID;
-      if (!ctx->get_resolver ()->lookup_resolved_label (
-	    expr.get_label ().get_mappings ().get_nodeid (), &resolved_node_id))
+      if (flag_name_resolution_2_0)
+	{
+	  auto &nr_ctx
+	    = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
+
+	  if (auto id
+	      = nr_ctx.lookup (expr.get_label ().get_mappings ().get_nodeid ()))
+	    resolved_node_id = *id;
+	}
+      else
+	{
+	  NodeId tmp = UNKNOWN_NODEID;
+
+	  if (ctx->get_resolver ()->lookup_resolved_label (
+		expr.get_label ().get_mappings ().get_nodeid (), &tmp))
+	    resolved_node_id = tmp;
+	}
+
+      if (resolved_node_id == UNKNOWN_NODEID)
 	{
 	  rust_error_at (
 	    expr.get_label ().get_locus (),


More information about the Gcc-cvs mailing list