diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2025-01-02 10:37:00 +0000 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2025-01-16 14:00:31 +0000 |
commit | e7011f62930b662426ceb53a4cc40a64268163b4 (patch) | |
tree | 74868d919dc94b8d6a986d2938e3bd4844efb4fc /gcc | |
parent | 432859bf783a7dc9fb81f267c5159c60435973cb (diff) | |
download | gcc-e7011f62930b662426ceb53a4cc40a64268163b4.zip gcc-e7011f62930b662426ceb53a4cc40a64268163b4.tar.gz gcc-e7011f62930b662426ceb53a4cc40a64268163b4.tar.bz2 |
tychk: resolve lang item type paths properly
gcc/rust/ChangeLog:
* typecheck/rust-hir-type-check-type.cc (TypeCheckType::resolve_root_path): Adapt
code to handle lang item type paths.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/typecheck/rust-hir-type-check-type.cc | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/gcc/rust/typecheck/rust-hir-type-check-type.cc b/gcc/rust/typecheck/rust-hir-type-check-type.cc index 7e623e0..e367c1b 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-type.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-type.cc @@ -379,6 +379,7 @@ TypeCheckType::resolve_root_path (HIR::TypePath &path, size_t *offset, { TyTy::BaseType *root_tyty = nullptr; *offset = 0; + for (size_t i = 0; i < path.get_num_segments (); i++) { std::unique_ptr<HIR::TypePathSegment> &seg = path.get_segments ().at (i); @@ -390,18 +391,25 @@ TypeCheckType::resolve_root_path (HIR::TypePath &path, size_t *offset, // then lookup the reference_node_id NodeId ref_node_id = UNKNOWN_NODEID; - // FIXME: HACK: ARTHUR: Remove this - if (flag_name_resolution_2_0) + if (seg->is_lang_item ()) + ref_node_id = Analysis::Mappings::get ().get_lang_item_node ( + seg->get_lang_item ()); + else { - auto nr_ctx - = Resolver2_0::ImmutableNameResolutionContext::get ().resolver (); + // FIXME: HACK: ARTHUR: Remove this + if (flag_name_resolution_2_0) + { + 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] (NodeId resolved) { ref_node_id = resolved; }); + // assign the ref_node_id if we've found something + nr_ctx.lookup (path.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); } - else if (!resolver->lookup_resolved_name (ast_node_id, &ref_node_id)) - resolver->lookup_resolved_type (ast_node_id, &ref_node_id); // ref_node_id is the NodeId that the segments refers to. if (ref_node_id == UNKNOWN_NODEID) |