diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-11-29 12:35:37 +0100 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2024-12-09 14:46:13 +0000 |
commit | c0513af26dc7236e0f8fd31b8f4fd8b2e3b713b7 (patch) | |
tree | 3e0c2283c42f9f333d01c54206ed8a43f0e4ea41 /gcc | |
parent | 625c811ed5093947ad32ab5fba2028229fd6604f (diff) | |
download | gcc-c0513af26dc7236e0f8fd31b8f4fd8b2e3b713b7.zip gcc-c0513af26dc7236e0f8fd31b8f4fd8b2e3b713b7.tar.gz gcc-c0513af26dc7236e0f8fd31b8f4fd8b2e3b713b7.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/resolve/rust-late-name-resolver-2.0.cc | 20 | ||||
-rw-r--r-- | gcc/rust/resolve/rust-late-name-resolver-2.0.h | 1 |
2 files changed, 21 insertions, 0 deletions
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 a96dc1c..f2245c9 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" @@ -248,6 +249,25 @@ Late::visit (AST::PathInExpression &expr) } 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) { // should we add type path resolution in `ForeverStack` directly? Since it's 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 5907703..98cf092 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; |