From: Arthur Cohen Date: Fri, 29 Nov 2024 11:35:37 +0000 (+0100) Subject: gccrs: nr2.0: Resolve lang item paths properly. X-Git-Tag: basepoints/gcc-16~984 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=89640686a29f8b3f256454b9c53a72c629efbe39;p=thirdparty%2Fgcc.git gccrs: nr2.0: Resolve lang item paths properly. gcc/rust/ChangeLog: * resolve/rust-late-name-resolver-2.0.cc (Late::visit): New. * resolve/rust-late-name-resolver-2.0.h: New. --- diff --git a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc index 3af8496288d..ac5f1c57546 100644 --- a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc +++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc @@ -18,6 +18,7 @@ #include "optional.h" #include "rust-ast-full.h" +#include "rust-diagnostics.h" #include "rust-hir-map.h" #include "rust-late-name-resolver-2.0.h" #include "rust-default-resolver.h" @@ -247,6 +248,25 @@ Late::visit (AST::PathInExpression &expr) Definition (resolved->get_node_id ())); } +void +Late::visit (AST::LangItemPath &type) +{ + auto &mappings = Rust::Analysis::Mappings::get (); + auto lang_item = mappings.lookup_lang_item_node (type.get_lang_item_kind ()); + + if (!lang_item) + { + rust_fatal_error ( + type.get_locus (), "use of undeclared lang item %qs", + LangItem::ToString (type.get_lang_item_kind ()).c_str ()); + return; + } + + ctx.map_usage (Usage (type.get_node_id ()), Definition (lang_item.value ())); + + DefaultResolver::visit (type); +} + void Late::visit (AST::TypePath &type) { diff --git a/gcc/rust/resolve/rust-late-name-resolver-2.0.h b/gcc/rust/resolve/rust-late-name-resolver-2.0.h index 79572fbc4fa..6f1191662cc 100644 --- a/gcc/rust/resolve/rust-late-name-resolver-2.0.h +++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.h @@ -46,6 +46,7 @@ public: // resolutions void visit (AST::IdentifierExpr &) override; void visit (AST::PathInExpression &) override; + void visit (AST::LangItemPath &) override; void visit (AST::TypePath &) override; void visit (AST::StructExprStruct &) override; void visit (AST::StructExprStructBase &) override;