]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Use name resolver 2.0 for compiling break/continue
authorOwen Avery <powerboat9.gamer@gmail.com>
Tue, 15 Oct 2024 18:56:04 +0000 (14:56 -0400)
committerArthur Cohen <arthur.cohen@embecosm.com>
Wed, 19 Mar 2025 14:32:18 +0000 (15:32 +0100)
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>
gcc/rust/backend/rust-compile-expr.cc

index 6458c42d78d1b19417a0584d74caf8f6156af1b2..7251cc82d6ed04884aba58c97ec000e59a8ae56c 100644 (file)
@@ -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 (),