]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Shape up name resolver for normal direct calls
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Wed, 10 Jan 2024 15:44:09 +0000 (16:44 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Thu, 1 Aug 2024 14:52:26 +0000 (16:52 +0200)
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>
gcc/rust/checks/lints/rust-lint-marklive.cc
gcc/rust/resolve/rust-late-name-resolver-2.0.cc

index 8787a9d85502ebf5c8d2f0aae23bc234327b80d5..1a0a0a2b904b4b9a84e0bc7eaf9293ec09c5d094 100644 (file)
 // 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);
+           }
        }
     }
 }
index ee06c4efc2ea3c80a65aff68a26557999598c669..68eb88a1e4c978ebbc95355c177213819b6fbbe3 100644 (file)
@@ -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