https://gcc.gnu.org/g:fd2ec3a52bba6f0232451143eecf19a3933f6ee0

commit fd2ec3a52bba6f0232451143eecf19a3933f6ee0
Author: Arthur Cohen <arthur.co...@embecosm.com>
Date:   Fri Aug 25 14:33:36 2023 +0200

    backend: Use new name resolver where necessary
    
    gcc/rust/ChangeLog:
    
            * backend/rust-compile-base.cc: Use new ImmutableNrCtx.
            * backend/rust-compile-context.h: Likewise.
            * backend/rust-compile-expr.cc: Likewise.
            * backend/rust-compile-item.cc: Likewise.

Diff:
---
 gcc/rust/backend/rust-compile-base.cc   |  1 +
 gcc/rust/backend/rust-compile-context.h |  1 +
 gcc/rust/backend/rust-compile-expr.cc   | 22 +++++++++++++++++-----
 gcc/rust/backend/rust-compile-item.cc   | 31 +++++++++++++++++++++++++------
 4 files changed, 44 insertions(+), 11 deletions(-)

diff --git a/gcc/rust/backend/rust-compile-base.cc 
b/gcc/rust/backend/rust-compile-base.cc
index 4d6f0275b004..584d6a03ea95 100644
--- a/gcc/rust/backend/rust-compile-base.cc
+++ b/gcc/rust/backend/rust-compile-base.cc
@@ -31,6 +31,7 @@
 #include "rust-type-util.h"
 #include "rust-compile-implitem.h"
 #include "rust-attribute-values.h"
+#include "rust-immutable-name-resolution-context.h"
 
 #include "fold-const.h"
 #include "stringpool.h"
diff --git a/gcc/rust/backend/rust-compile-context.h 
b/gcc/rust/backend/rust-compile-context.h
index 36a36e79f680..671aee196c2a 100644
--- a/gcc/rust/backend/rust-compile-context.h
+++ b/gcc/rust/backend/rust-compile-context.h
@@ -27,6 +27,7 @@
 #include "rust-hir-full.h"
 #include "rust-mangle.h"
 #include "rust-tree.h"
+#include "rust-immutable-name-resolution-context.h"
 
 namespace Rust {
 namespace Compile {
diff --git a/gcc/rust/backend/rust-compile-expr.cc 
b/gcc/rust/backend/rust-compile-expr.cc
index 65de24bf9d8c..6a9bb73ffe0f 100644
--- a/gcc/rust/backend/rust-compile-expr.cc
+++ b/gcc/rust/backend/rust-compile-expr.cc
@@ -2311,11 +2311,23 @@ CompileExpr::generate_closure_function 
(HIR::ClosureExpr &expr,
   if (is_block_expr)
     {
       auto body_mappings = function_body->get_mappings ();
-      Resolver::Rib *rib = nullptr;
-      bool ok
-       = ctx->get_resolver ()->find_name_rib (body_mappings.get_nodeid (),
-                                              &rib);
-      rust_assert (ok);
+      if (flag_name_resolution_2_0)
+       {
+         auto nr_ctx
+           = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
+
+         auto candidate = nr_ctx.values.to_rib (body_mappings.get_nodeid ());
+
+         rust_assert (candidate.has_value ());
+       }
+      else
+       {
+         Resolver::Rib *rib = nullptr;
+         bool ok
+           = ctx->get_resolver ()->find_name_rib (body_mappings.get_nodeid (),
+                                                  &rib);
+         rust_assert (ok);
+       }
     }
 
   tree enclosing_scope = NULL_TREE;
diff --git a/gcc/rust/backend/rust-compile-item.cc 
b/gcc/rust/backend/rust-compile-item.cc
index 234ad2aa59c1..8feed51efa4f 100644
--- a/gcc/rust/backend/rust-compile-item.cc
+++ b/gcc/rust/backend/rust-compile-item.cc
@@ -19,6 +19,7 @@
 #include "rust-compile-item.h"
 #include "rust-compile-implitem.h"
 #include "rust-compile-extern.h"
+#include "rust-immutable-name-resolution-context.h"
 
 namespace Rust {
 namespace Compile {
@@ -149,12 +150,30 @@ CompileItem::visit (HIR::Function &function)
        }
     }
 
-  const Resolver::CanonicalPath *canonical_path = nullptr;
-  bool ok = ctx->get_mappings ()->lookup_canonical_path (
-    function.get_mappings ().get_nodeid (), &canonical_path);
-  rust_assert (ok);
+  Resolver::CanonicalPath canonical_path
+    = Resolver::CanonicalPath::create_empty ();
+
+  if (flag_name_resolution_2_0)
+    {
+      auto nr_ctx
+       = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
+
+      auto path = nr_ctx.values.to_canonical_path (
+       function.get_mappings ().get_nodeid ());
+
+      canonical_path = path.value ();
+    }
+  else
+    {
+      const Resolver::CanonicalPath *path = nullptr;
+      bool ok = ctx->get_mappings ()->lookup_canonical_path (
+       function.get_mappings ().get_nodeid (), &path);
+      rust_assert (ok);
+
+      canonical_path = *path;
+    }
 
-  const std::string asm_name = ctx->mangle_item (fntype, *canonical_path);
+  const std::string asm_name = ctx->mangle_item (fntype, canonical_path);
 
   // items can be forward compiled which means we may not need to invoke this
   // code. We might also have already compiled this generic function as well.
@@ -181,7 +200,7 @@ CompileItem::visit (HIR::Function &function)
                        function.get_function_params (),
                        function.get_qualifiers (), function.get_visibility (),
                        function.get_outer_attrs (), function.get_locus (),
-                       function.get_definition ().get (), canonical_path,
+                       function.get_definition ().get (), &canonical_path,
                        fntype);
   reference = address_expression (fndecl, ref_locus);

Reply via email to