aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2023-08-25 14:33:36 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2024-08-01 16:52:24 +0200
commit786bc62f957e373d40a8c11fa4e607383ab2e2f1 (patch)
tree9168cfef6f69aa79d8fbbc4f23758992024de67e /gcc/rust/backend
parente476d3234468f4b565467bfe09722abcc959d934 (diff)
downloadgcc-786bc62f957e373d40a8c11fa4e607383ab2e2f1.zip
gcc-786bc62f957e373d40a8c11fa4e607383ab2e2f1.tar.gz
gcc-786bc62f957e373d40a8c11fa4e607383ab2e2f1.tar.bz2
gccrs: 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.
Diffstat (limited to 'gcc/rust/backend')
-rw-r--r--gcc/rust/backend/rust-compile-base.cc1
-rw-r--r--gcc/rust/backend/rust-compile-context.h1
-rw-r--r--gcc/rust/backend/rust-compile-expr.cc22
-rw-r--r--gcc/rust/backend/rust-compile-item.cc31
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 4d6f027..584d6a0 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 36a36e7..671aee1 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 65de24b..6a9bb73 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 234ad2a..8feed51 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);