diff options
author | Raiki Tamura <tamaron1203@gmail.com> | 2024-08-09 23:56:55 +0900 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2025-03-19 15:32:04 +0100 |
commit | 4f58a20d7e27aaa63e21dba072013b496baa94d1 (patch) | |
tree | f24aee86be0a05780d0854a59061242ecf169d55 /gcc/rust/hir/tree | |
parent | b7e79e38fe97e9f41008f0a48bd41ffdd7a2895c (diff) | |
download | gcc-4f58a20d7e27aaa63e21dba072013b496baa94d1.zip gcc-4f58a20d7e27aaa63e21dba072013b496baa94d1.tar.gz gcc-4f58a20d7e27aaa63e21dba072013b496baa94d1.tar.bz2 |
gccrs: Add typecheck for path patterns.
gcc/rust/ChangeLog:
* hir/tree/rust-hir.cc (Item::item_kind_string): New function.
* hir/tree/rust-hir.h: New function.
* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit):
Modify to check all arms in match expressions even if some of them
has errors.
* typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::visit):
Add and fix check for path patterns.
gcc/testsuite/ChangeLog:
* rust/compile/issue-2324-2.rs: Fix error message.
* rust/compile/match9.rs: New test.
Signed-off-by: Raiki Tamura <tamaron1203@gmail.com>
Diffstat (limited to 'gcc/rust/hir/tree')
-rw-r--r-- | gcc/rust/hir/tree/rust-hir.cc | 38 | ||||
-rw-r--r-- | gcc/rust/hir/tree/rust-hir.h | 2 |
2 files changed, 40 insertions, 0 deletions
diff --git a/gcc/rust/hir/tree/rust-hir.cc b/gcc/rust/hir/tree/rust-hir.cc index 6290e72..8e0d444 100644 --- a/gcc/rust/hir/tree/rust-hir.cc +++ b/gcc/rust/hir/tree/rust-hir.cc @@ -213,6 +213,44 @@ Module::as_string () const } std::string +Item::item_kind_string (Item::ItemKind kind) +{ + switch (kind) + { + case Item::ItemKind::Static: + return "static"; + case Item::ItemKind::Constant: + return "constant"; + case Item::ItemKind::TypeAlias: + return "type alias"; + case Item::ItemKind::Function: + return "function"; + case Item::ItemKind::UseDeclaration: + return "use declaration"; + case Item::ItemKind::ExternBlock: + return "extern block"; + case Item::ItemKind::ExternCrate: + return "extern crate"; + case Item::ItemKind::Struct: + return "struct"; + case Item::ItemKind::Union: + return "union"; + case Item::ItemKind::Enum: + return "enum"; + case Item::ItemKind::EnumItem: + return "enum item"; + case Item::ItemKind::Trait: + return "trait"; + case Item::ItemKind::Impl: + return "impl"; + case Item::ItemKind::Module: + return "module"; + default: + rust_unreachable (); + } +} + +std::string StaticItem::as_string () const { std::string str = VisItem::as_string (); diff --git a/gcc/rust/hir/tree/rust-hir.h b/gcc/rust/hir/tree/rust-hir.h index 8a27161..f8eb22d 100644 --- a/gcc/rust/hir/tree/rust-hir.h +++ b/gcc/rust/hir/tree/rust-hir.h @@ -220,6 +220,8 @@ public: Module, }; + static std::string item_kind_string (ItemKind kind); + virtual ItemKind get_item_kind () const = 0; // Unique pointer custom clone function |