diff options
author | Owen Avery <powerboat9.gamer@gmail.com> | 2024-10-26 19:43:11 -0400 |
---|---|---|
committer | P-E-P <32375388+P-E-P@users.noreply.github.com> | 2024-10-29 10:18:26 +0000 |
commit | 5ad1d886a97c271aa7e069ac9c699c0797079de0 (patch) | |
tree | 56acb100b9d5a730456318ea8324db2fbc0c82f1 /gcc | |
parent | 5fe9110bbf425f3a41f02ca191e5a34d34520712 (diff) | |
download | gcc-5ad1d886a97c271aa7e069ac9c699c0797079de0.zip gcc-5ad1d886a97c271aa7e069ac9c699c0797079de0.tar.gz gcc-5ad1d886a97c271aa7e069ac9c699c0797079de0.tar.bz2 |
Use name resolution 2.0 in TraitResolver
gcc/rust/ChangeLog:
* typecheck/rust-hir-trait-resolve.cc: Add includes.
(TraitResolver::resolve_path_to_trait):
Use name resolution 2.0 resolver when enabled.
gcc/testsuite/ChangeLog:
* rust/compile/nr2/exclude: Remove entries.
Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/typecheck/rust-hir-trait-resolve.cc | 24 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/nr2/exclude | 2 |
2 files changed, 22 insertions, 4 deletions
diff --git a/gcc/rust/typecheck/rust-hir-trait-resolve.cc b/gcc/rust/typecheck/rust-hir-trait-resolve.cc index 3e41d2f..3e66e75 100644 --- a/gcc/rust/typecheck/rust-hir-trait-resolve.cc +++ b/gcc/rust/typecheck/rust-hir-trait-resolve.cc @@ -20,6 +20,10 @@ #include "rust-hir-type-check-expr.h" #include "rust-substitution-mapper.h" #include "rust-type-util.h" +#include "rust-immutable-name-resolution-context.h" + +// used for flag_name_resolution_2_0 +#include "options.h" namespace Rust { namespace Resolver { @@ -110,8 +114,24 @@ TraitResolver::resolve_path_to_trait (const HIR::TypePath &path, HIR::Trait **resolved) const { NodeId ref; - if (!resolver->lookup_resolved_type (path.get_mappings ().get_nodeid (), - &ref)) + bool ok; + if (flag_name_resolution_2_0) + { + auto &nr_ctx + = Resolver2_0::ImmutableNameResolutionContext::get ().resolver (); + + auto ref_opt = nr_ctx.lookup (path.get_mappings ().get_nodeid ()); + + if ((ok = ref_opt.has_value ())) + ref = *ref_opt; + } + else + { + ok = resolver->lookup_resolved_type (path.get_mappings ().get_nodeid (), + &ref); + } + + if (!ok) { rust_error_at (path.get_locus (), "Failed to resolve path to node-id"); return false; diff --git a/gcc/testsuite/rust/compile/nr2/exclude b/gcc/testsuite/rust/compile/nr2/exclude index 424ad68..f4304da 100644 --- a/gcc/testsuite/rust/compile/nr2/exclude +++ b/gcc/testsuite/rust/compile/nr2/exclude @@ -65,7 +65,6 @@ issue-1272.rs issue-1289.rs issue-1447.rs issue-1483.rs -issue-1589.rs issue-1725-1.rs issue-1725-2.rs issue-1786.rs @@ -175,7 +174,6 @@ sizeof-stray-infer-var-bug.rs specify-crate-name.rs stmt_with_block_dot.rs struct-expr-parse.rs -trait-cycle.rs traits1.rs traits10.rs traits11.rs |