From a63f0ac77e448551b7320dac3acfb0a6331d6fe9 Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Wed, 13 Mar 2024 16:44:00 +0100 Subject: Prevent getting immutable context with classic nr 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 --- gcc/rust/typecheck/rust-hir-type-check-path.cc | 14 ++++++++------ gcc/rust/typecheck/rust-hir-type-check-type.cc | 17 +++++++++-------- 2 files changed, 17 insertions(+), 14 deletions(-) (limited to 'gcc') diff --git a/gcc/rust/typecheck/rust-hir-type-check-path.cc b/gcc/rust/typecheck/rust-hir-type-check-path.cc index b0e52c4..dd6ab03 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-path.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-path.cc @@ -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); diff --git a/gcc/rust/typecheck/rust-hir-type-check-type.cc b/gcc/rust/typecheck/rust-hir-type-check-type.cc index 588e5bc..44ebc15 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-type.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-type.cc @@ -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); -- cgit v1.1