]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Fix some issues with canonical path fetching in name resolution 2.0
authorOwen Avery <powerboat9.gamer@gmail.com>
Wed, 9 Oct 2024 03:29:27 +0000 (23:29 -0400)
committerArthur Cohen <arthur.cohen@embecosm.com>
Wed, 19 Mar 2025 14:32:16 +0000 (15:32 +0100)
gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-enumitem.cc: Add includes.
(TypeCheckEnumItem::visit): Fetch canonical paths properly when
name resolution 2.0 is enabled.
* typecheck/rust-hir-type-check-implitem.cc: Add includes.
(TypeCheckImplItem::visit): Fetch canonical paths properly when
name resolution 2.0 is enabled.
* typecheck/rust-hir-type-check-item.cc: Add include.
(TypeCheckItem::visit): Fetch canonical paths properly when name
resolution 2.0 is enabled.

gcc/testsuite/ChangeLog:

* rust/compile/nr2/exclude: Remove entries.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
gcc/rust/typecheck/rust-hir-type-check-enumitem.cc
gcc/rust/typecheck/rust-hir-type-check-implitem.cc
gcc/rust/typecheck/rust-hir-type-check-item.cc
gcc/testsuite/rust/compile/nr2/exclude

index 72d8791fe56103844fb30f250e2dda16dec50f17..a9154c64786741d6c656c159796187b6269ae73d 100644 (file)
 #include "rust-hir-type-check-expr.h"
 #include "rust-hir-type-check-enumitem.h"
 #include "rust-type-util.h"
+#include "rust-immutable-name-resolution-context.h"
+
+// for flag_name_resolution_2_0
+#include "options.h"
 
 namespace Rust {
 namespace Resolver {
@@ -75,8 +79,23 @@ TypeCheckEnumItem::visit (HIR::EnumItem &item)
   rust_assert (ok);
   context->insert_type (mapping, isize);
 
-  auto canonical_path
-    = mappings.lookup_canonical_path (item.get_mappings ().get_nodeid ());
+  tl::optional<CanonicalPath> canonical_path;
+
+  if (flag_name_resolution_2_0)
+    {
+      auto nr_ctx
+       = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
+
+      canonical_path
+       = nr_ctx.types.to_canonical_path (item.get_mappings ().get_nodeid ());
+    }
+  else
+    {
+      canonical_path
+       = mappings.lookup_canonical_path (item.get_mappings ().get_nodeid ());
+    }
+
+  rust_assert (canonical_path.has_value ());
 
   RustIdent ident{*canonical_path, item.get_locus ()};
   variant = new TyTy::VariantDef (item.get_mappings ().get_hirid (),
@@ -104,8 +123,23 @@ TypeCheckEnumItem::visit (HIR::EnumItemDiscriminant &item)
              TyTy::TyWithLocation (expected_ty),
              TyTy::TyWithLocation (capacity_type), item.get_locus ());
 
-  auto canonical_path
-    = mappings.lookup_canonical_path (item.get_mappings ().get_nodeid ());
+  tl::optional<CanonicalPath> canonical_path;
+
+  if (flag_name_resolution_2_0)
+    {
+      auto nr_ctx
+       = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
+
+      canonical_path
+       = nr_ctx.types.to_canonical_path (item.get_mappings ().get_nodeid ());
+    }
+  else
+    {
+      canonical_path
+       = mappings.lookup_canonical_path (item.get_mappings ().get_nodeid ());
+    }
+
+  rust_assert (canonical_path.has_value ());
 
   RustIdent ident{*canonical_path, item.get_locus ()};
   variant = new TyTy::VariantDef (item.get_mappings ().get_hirid (),
@@ -151,8 +185,23 @@ TypeCheckEnumItem::visit (HIR::EnumItemTuple &item)
   rust_assert (ok);
   context->insert_type (mapping, isize);
 
-  auto canonical_path
-    = mappings.lookup_canonical_path (item.get_mappings ().get_nodeid ());
+  tl::optional<CanonicalPath> canonical_path;
+
+  if (flag_name_resolution_2_0)
+    {
+      auto nr_ctx
+       = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
+
+      canonical_path
+       = nr_ctx.types.to_canonical_path (item.get_mappings ().get_nodeid ());
+    }
+  else
+    {
+      canonical_path
+       = mappings.lookup_canonical_path (item.get_mappings ().get_nodeid ());
+    }
+
+  rust_assert (canonical_path.has_value ());
 
   RustIdent ident{*canonical_path, item.get_locus ()};
   variant = new TyTy::VariantDef (item.get_mappings ().get_hirid (),
@@ -197,8 +246,23 @@ TypeCheckEnumItem::visit (HIR::EnumItemStruct &item)
   rust_assert (ok);
   context->insert_type (mapping, isize);
 
-  auto canonical_path
-    = mappings.lookup_canonical_path (item.get_mappings ().get_nodeid ());
+  tl::optional<CanonicalPath> canonical_path;
+
+  if (flag_name_resolution_2_0)
+    {
+      auto nr_ctx
+       = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
+
+      canonical_path
+       = nr_ctx.types.to_canonical_path (item.get_mappings ().get_nodeid ());
+    }
+  else
+    {
+      canonical_path
+       = mappings.lookup_canonical_path (item.get_mappings ().get_nodeid ());
+    }
+
+  rust_assert (canonical_path.has_value ());
 
   RustIdent ident{*canonical_path, item.get_locus ()};
   variant = new TyTy::VariantDef (item.get_mappings ().get_hirid (),
index 58d59d97cece7ac36e8574fe0ee08aaa60598c1f..0036e9a6c894d2b0a96d924569c1e68005c3461a 100644 (file)
 #include "rust-hir-type-check-pattern.h"
 #include "rust-type-util.h"
 #include "rust-tyty.h"
+#include "rust-immutable-name-resolution-context.h"
+
+// for flag_name_resolution_2_0
+#include "options.h"
 
 namespace Rust {
 namespace Resolver {
@@ -461,8 +465,23 @@ TypeCheckImplItem::visit (HIR::Function &function)
       TypeCheckPattern::Resolve (param.get_param_name ().get (), param_tyty);
     }
 
-  auto canonical_path
-    = mappings.lookup_canonical_path (function.get_mappings ().get_nodeid ());
+  tl::optional<CanonicalPath> canonical_path;
+
+  if (flag_name_resolution_2_0)
+    {
+      auto nr_ctx
+       = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
+
+      canonical_path = nr_ctx.values.to_canonical_path (
+       function.get_mappings ().get_nodeid ());
+    }
+  else
+    {
+      canonical_path = mappings.lookup_canonical_path (
+       function.get_mappings ().get_nodeid ());
+    }
+
+  rust_assert (canonical_path.has_value ());
 
   RustIdent ident{*canonical_path, function.get_locus ()};
   auto fnType = new TyTy::FnType (
index 3858d5132f9a029d35bd0a6925095223e7ca7e35..4ea685261cb5abaa647ae739384c5da3de941f0e 100644 (file)
@@ -32,6 +32,9 @@
 #include "rust-type-util.h"
 #include "rust-tyty-variance-analysis.h"
 
+// for flag_name_resolution_2_0
+#include "options.h"
+
 namespace Rust {
 namespace Resolver {
 
@@ -343,8 +346,24 @@ TypeCheckItem::visit (HIR::Enum &enum_decl)
     }
 
   // get the path
-  auto canonical_path
-    = mappings.lookup_canonical_path (enum_decl.get_mappings ().get_nodeid ());
+  tl::optional<CanonicalPath> canonical_path;
+
+  if (flag_name_resolution_2_0)
+    {
+      auto nr_ctx
+       = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
+
+      canonical_path = nr_ctx.types.to_canonical_path (
+       enum_decl.get_mappings ().get_nodeid ());
+    }
+  else
+    {
+      canonical_path = mappings.lookup_canonical_path (
+       enum_decl.get_mappings ().get_nodeid ());
+    }
+
+  rust_assert (canonical_path.has_value ());
+
   RustIdent ident{*canonical_path, enum_decl.get_locus ()};
 
   // multi variant ADT
@@ -390,8 +409,24 @@ TypeCheckItem::visit (HIR::Union &union_decl)
     }
 
   // get the path
-  auto canonical_path
-    = mappings.lookup_canonical_path (union_decl.get_mappings ().get_nodeid ());
+  tl::optional<CanonicalPath> canonical_path;
+
+  if (flag_name_resolution_2_0)
+    {
+      auto nr_ctx
+       = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
+
+      canonical_path = nr_ctx.types.to_canonical_path (
+       union_decl.get_mappings ().get_nodeid ());
+    }
+  else
+    {
+      canonical_path = mappings.lookup_canonical_path (
+       union_decl.get_mappings ().get_nodeid ());
+    }
+
+  rust_assert (canonical_path.has_value ());
+
   RustIdent ident{*canonical_path, union_decl.get_locus ()};
 
   // there is only a single variant
index f254c56eb526f07f9bf1f85d0988a2dde94b7ba8..e0aa15531e1f48908cd5129b888dc0710f30a560 100644 (file)
@@ -33,7 +33,6 @@ const_generics_3.rs
 const_generics_4.rs
 const_generics_5.rs
 const_generics_7.rs
-const_generics_8.rs
 derive_empty.rs
 derive_macro1.rs
 derive_macro3.rs
@@ -61,8 +60,6 @@ generics8.rs
 generics9.rs
 if_let_expr.rs
 infer-crate-name.rs
-issue-1005.rs
-issue-1006.rs
 issue-1019.rs
 issue-1031.rs
 issue-1034.rs
@@ -92,7 +89,6 @@ issue-2019-2.rs
 issue-2019-3.rs
 issue-2036.rs
 issue-2037.rs
-issue-2039.rs
 issue-2043.rs
 issue-2070.rs
 issue-2105.rs
@@ -141,7 +137,6 @@ macros/mbe/macro43.rs
 macros/mbe/macro44.rs
 macros/mbe/macro50.rs
 macros/mbe/macro54.rs
-macros/mbe/macro55.rs
 macros/mbe/macro6.rs
 macros/mbe/macro_rules_macro_rules.rs
 macros/mbe/macro_use1.rs
@@ -154,7 +149,6 @@ match4.rs
 match5.rs
 match8.rs
 match9.rs
-method1.rs
 method2.rs
 missing_constructor_fields.rs
 multi_reference_type.rs
@@ -222,8 +216,6 @@ unsafe2.rs
 unsafe3.rs
 unsafe6.rs
 unsafe7.rs
-unsafe8.rs
-unsafe9.rs
 use_1.rs
 use_2.rs
 v0-mangle1.rs