Skip to content

Commit c0513af

Browse files
committed
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.
1 parent 625c811 commit c0513af

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

gcc/rust/resolve/rust-late-name-resolver-2.0.cc

+20
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include "optional.h"
2020
#include "rust-ast-full.h"
21+
#include "rust-diagnostics.h"
2122
#include "rust-hir-map.h"
2223
#include "rust-late-name-resolver-2.0.h"
2324
#include "rust-default-resolver.h"
@@ -247,6 +248,25 @@ Late::visit (AST::PathInExpression &expr)
247248
Definition (resolved->get_node_id ()));
248249
}
249250

251+
void
252+
Late::visit (AST::LangItemPath &type)
253+
{
254+
auto &mappings = Rust::Analysis::Mappings::get ();
255+
auto lang_item = mappings.lookup_lang_item_node (type.get_lang_item_kind ());
256+
257+
if (!lang_item)
258+
{
259+
rust_fatal_error (
260+
type.get_locus (), "use of undeclared lang item %qs",
261+
LangItem::ToString (type.get_lang_item_kind ()).c_str ());
262+
return;
263+
}
264+
265+
ctx.map_usage (Usage (type.get_node_id ()), Definition (lang_item.value ()));
266+
267+
DefaultResolver::visit (type);
268+
}
269+
250270
void
251271
Late::visit (AST::TypePath &type)
252272
{

gcc/rust/resolve/rust-late-name-resolver-2.0.h

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class Late : public DefaultResolver
4646
// resolutions
4747
void visit (AST::IdentifierExpr &) override;
4848
void visit (AST::PathInExpression &) override;
49+
void visit (AST::LangItemPath &) override;
4950
void visit (AST::TypePath &) override;
5051
void visit (AST::StructExprStruct &) override;
5152
void visit (AST::StructExprStructBase &) override;

0 commit comments

Comments
 (0)