https://gcc.gnu.org/g:bcd780d114f983b49078a5996f898f2750e6f214

commit r15-8505-gbcd780d114f983b49078a5996f898f2750e6f214
Author: Owen Avery <powerboat9.ga...@gmail.com>
Date:   Sat Oct 26 19:43:11 2024 -0400

    gccrs: 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.ga...@gmail.com>

Diff:
---
 gcc/rust/typecheck/rust-hir-trait-resolve.cc | 24 ++++++++++++++++++++++--
 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 91842df85b22..3d99794f3d6c 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 424ad6860945..f4304dae1d85 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

Reply via email to