]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: nr1.0: Resolve lang item paths properly.
authorArthur Cohen <arthur.cohen@embecosm.com>
Wed, 4 Dec 2024 14:14:45 +0000 (15:14 +0100)
committerArthur Cohen <arthur.cohen@embecosm.com>
Fri, 21 Mar 2025 11:33:13 +0000 (12:33 +0100)
gcc/rust/ChangeLog:

* resolve/rust-ast-resolve-item.cc (ResolveItem::visit): Adapt resolver
to lang item paths.
* resolve/rust-ast-resolve-type.h: Likewise.

gcc/rust/resolve/rust-ast-resolve-item.cc
gcc/rust/resolve/rust-ast-resolve-type.h

index a330541b6828daf3506f35522f9897c11053e6c8..33b4fc9b9792add5eeeb2ce6a168fc8be67ce1e5 100644 (file)
@@ -678,16 +678,32 @@ ResolveItem::visit (AST::TraitImpl &impl_block)
       return;
     }
 
+  bool ok = true;
+
   // setup paths
   CanonicalPath canonical_trait_type = CanonicalPath::create_empty ();
-  bool ok = ResolveTypeToCanonicalPath::go (impl_block.get_trait_path_type (),
-                                           canonical_trait_type);
-  if (!ok)
+  if (impl_block.get_trait_path ().get_path_kind ()
+      == AST::Path::Kind::LangItem)
     {
-      resolver->get_name_scope ().pop ();
-      resolver->get_type_scope ().pop ();
-      resolver->get_label_scope ().pop ();
-      return;
+      auto &lang_item
+       = static_cast<AST::LangItemPath &> (impl_block.get_trait_path ());
+
+      canonical_trait_type
+       = CanonicalPath::new_seg (lang_item.get_node_id (),
+                                 LangItem::ToString (
+                                   lang_item.get_lang_item_kind ()));
+    }
+  else
+    {
+      ok = ResolveTypeToCanonicalPath::go (impl_block.get_trait_path_type (),
+                                          canonical_trait_type);
+      if (!ok)
+       {
+         resolver->get_name_scope ().pop ();
+         resolver->get_type_scope ().pop ();
+         resolver->get_label_scope ().pop ();
+         return;
+       }
     }
 
   rust_debug ("AST::TraitImpl resolve trait type: {%s}",
index ed055a1f04ea66e6f8ae40f7417b269f3ebb1e36..7c3831a28294ae297fa533cb68713fde7928679d 100644 (file)
 
 #include "rust-ast-resolve-base.h"
 #include "rust-ast-resolve-expr.h"
+#include "rust-diagnostics.h"
 #include "rust-hir-map.h"
 #include "rust-path.h"
+#include "util/rust-hir-map.h"
 
 namespace Rust {
 namespace Resolver {
@@ -69,9 +71,14 @@ public:
       {
        auto &type = static_cast<AST::LangItemPath &> (type_path);
 
-       Analysis::Mappings::get_lang_item (type);
+       rust_debug ("[ARTHUR]: lang item kind: %s",
+                   LangItem::ToString (type.get_lang_item_kind ()).c_str ());
 
-       type.get_node_id ();
+       auto lang_item = Analysis::Mappings::get ()
+                          .lookup_lang_item_node (type.get_lang_item_kind ())
+                          .value ();
+
+       return lang_item;
       }
 
     rust_assert (type_path.get_path_kind () == AST::Path::Kind::Type);