diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2024-01-10 16:44:09 +0100 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-08-01 16:52:26 +0200 |
commit | d284cf6fe2006df512b4e63f5db554ef39e9f3ab (patch) | |
tree | b5d519cac43668474723939df906a85521ce1758 /gcc | |
parent | 8c331e24575c0584be372a78bb0bbcca914d567c (diff) | |
download | gcc-d284cf6fe2006df512b4e63f5db554ef39e9f3ab.zip gcc-d284cf6fe2006df512b4e63f5db554ef39e9f3ab.tar.gz gcc-d284cf6fe2006df512b4e63f5db554ef39e9f3ab.tar.bz2 |
gccrs: Shape up name resolver for normal direct calls
Direct function calls did not work anymore due to the transition to the
new resolver.
gcc/rust/ChangeLog:
* checks/lints/rust-lint-marklive.cc (MarkLive::find_ref_node_id):
Add code path for the resolver 2.0
* resolve/rust-late-name-resolver-2.0.cc (Late::visit): Remove failing
label context resolve call.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/checks/lints/rust-lint-marklive.cc | 23 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-late-name-resolver-2.0.cc | 3 |
2 files changed, 21 insertions, 5 deletions
diff --git a/gcc/rust/checks/lints/rust-lint-marklive.cc b/gcc/rust/checks/lints/rust-lint-marklive.cc index 8787a9d..1a0a0a2 100644 --- a/gcc/rust/checks/lints/rust-lint-marklive.cc +++ b/gcc/rust/checks/lints/rust-lint-marklive.cc @@ -20,8 +20,10 @@ // from live codes are live, and everything else is dead. #include "rust-lint-marklive.h" +#include "options.h" #include "rust-hir-full.h" #include "rust-name-resolver.h" +#include "rust-immutable-name-resolution-context.h" namespace Rust { namespace Analysis { @@ -270,12 +272,25 @@ MarkLive::mark_hir_id (HirId id) void MarkLive::find_ref_node_id (NodeId ast_node_id, NodeId &ref_node_id) { - if (!resolver->lookup_resolved_name (ast_node_id, &ref_node_id)) + if (flag_name_resolution_2_0) { - if (!resolver->lookup_resolved_type (ast_node_id, &ref_node_id)) + auto nr_ctx + = Resolver2_0::ImmutableNameResolutionContext::get ().resolver (); + + nr_ctx.lookup (ast_node_id).map ([&ref_node_id] (NodeId resolved) { + ref_node_id = resolved; + }); + } + else + { + if (!resolver->lookup_resolved_name (ast_node_id, &ref_node_id)) { - bool ok = resolver->lookup_resolved_misc (ast_node_id, &ref_node_id); - rust_assert (ok); + if (!resolver->lookup_resolved_type (ast_node_id, &ref_node_id)) + { + bool ok + = resolver->lookup_resolved_misc (ast_node_id, &ref_node_id); + rust_assert (ok); + } } } } diff --git a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc index ee06c4e..68eb88a 100644 --- a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc @@ -196,8 +196,9 @@ Late::visit (AST::PathInExpression &expr) // in a function item` error here? // do we emit it in `get<Namespace::Labels>`? - auto label = ctx.labels.resolve_path (expr.get_segments ()); auto value = ctx.values.resolve_path (expr.get_segments ()); + + ctx.map_usage (Usage (expr.get_node_id ()), Definition (*value)); } void |