]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Prevent getting immutable context with classic nr
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Wed, 13 Mar 2024 15:44:00 +0000 (16:44 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Thu, 1 Aug 2024 14:52:28 +0000 (16:52 +0200)
Immutable name resolution context is not initialized when the classic
name resolution is in use. It can therefore not be used, the getter would
error out.

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::resolve_root_path):
Only get immutable name resolution context when name resolution 2.0 is
used.
* typecheck/rust-hir-type-check-type.cc (TypeCheckType::resolve_root_path):
Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/typecheck/rust-hir-type-check-path.cc
gcc/rust/typecheck/rust-hir-type-check-type.cc

index b0e52c454e9d44be97f592102557b28d93fe95cf..dd6ab03a3627552d8f2c869dd69f9c8f8eada383 100644 (file)
@@ -199,16 +199,18 @@ TypeCheckExpr::resolve_root_path (HIR::PathInExpression &expr, size_t *offset,
       bool is_root = *offset == 0;
       NodeId ast_node_id = seg.get_mappings ().get_nodeid ();
 
-      auto nr_ctx
-       = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
-
       // then lookup the reference_node_id
       NodeId ref_node_id = UNKNOWN_NODEID;
 
       if (flag_name_resolution_2_0)
-       // assign the ref_node_id if we've found something
-       nr_ctx.lookup (expr.get_mappings ().get_nodeid ())
-         .map ([&ref_node_id] (NodeId resolved) { ref_node_id = resolved; });
+       {
+         auto nr_ctx
+           = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
+
+         // assign the ref_node_id if we've found something
+         nr_ctx.lookup (expr.get_mappings ().get_nodeid ())
+           .map ([&ref_node_id] (NodeId resolved) { ref_node_id = resolved; });
+       }
       else if (!resolver->lookup_resolved_name (ast_node_id, &ref_node_id))
        resolver->lookup_resolved_type (ast_node_id, &ref_node_id);
 
index 588e5bce88e10304255eb7e6ce2ec1a101c0c738..44ebc159b23a9f75ada4bda0b18444d2ffcee9c6 100644 (file)
@@ -341,19 +341,20 @@ TypeCheckType::resolve_root_path (HIR::TypePath &path, size_t *offset,
       bool is_root = *offset == 0;
       NodeId ast_node_id = seg->get_mappings ().get_nodeid ();
 
-      auto nr_ctx
-       = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
-
       // then lookup the reference_node_id
       NodeId ref_node_id = UNKNOWN_NODEID;
 
       // FIXME: HACK: ARTHUR: Remove this
       if (flag_name_resolution_2_0)
-       // assign the ref_node_id if we've found something
-       nr_ctx.lookup (path.get_mappings ().get_nodeid ())
-         .map ([&ref_node_id, &path] (NodeId resolved) {
-           ref_node_id = resolved;
-         });
+       {
+         auto nr_ctx
+           = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
+         // assign the ref_node_id if we've found something
+         nr_ctx.lookup (path.get_mappings ().get_nodeid ())
+           .map ([&ref_node_id, &path] (NodeId resolved) {
+             ref_node_id = resolved;
+           });
+       }
       else if (!resolver->lookup_resolved_name (ast_node_id, &ref_node_id))
        resolver->lookup_resolved_type (ast_node_id, &ref_node_id);