aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir/tree
diff options
context:
space:
mode:
authorRaiki Tamura <tamaron1203@gmail.com>2024-08-09 23:56:55 +0900
committerArthur Cohen <arthur.cohen@embecosm.com>2025-03-19 15:32:04 +0100
commit4f58a20d7e27aaa63e21dba072013b496baa94d1 (patch)
treef24aee86be0a05780d0854a59061242ecf169d55 /gcc/rust/hir/tree
parentb7e79e38fe97e9f41008f0a48bd41ffdd7a2895c (diff)
downloadgcc-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.cc38
-rw-r--r--gcc/rust/hir/tree/rust-hir.h2
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