diff options
author | Thomas Young <wenzhang5800@gmail.com> | 2022-05-22 12:11:21 +0800 |
---|---|---|
committer | Thomas Young <wenzhang5800@gmail.com> | 2022-05-22 23:31:55 +0800 |
commit | dccb3f8121e416009dae6e5b8f675603d2a0503d (patch) | |
tree | eab9e9164c6e17bcc6273224e4c254dcd8cd6ecf | |
parent | 93e59035536616ca7b1e9be4a8ed3eeddd0d8fee (diff) | |
download | gcc-dccb3f8121e416009dae6e5b8f675603d2a0503d.zip gcc-dccb3f8121e416009dae6e5b8f675603d2a0503d.tar.gz gcc-dccb3f8121e416009dae6e5b8f675603d2a0503d.tar.bz2 |
Marklive: support match expr
-rw-r--r-- | gcc/rust/hir/tree/rust-hir-expr.h | 6 | ||||
-rw-r--r-- | gcc/rust/lint/rust-lint-marklive.h | 13 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/match6.rs | 18 |
3 files changed, 37 insertions, 0 deletions
diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h index e585dd2..f6f035e 100644 --- a/gcc/rust/hir/tree/rust-hir-expr.h +++ b/gcc/rust/hir/tree/rust-hir-expr.h @@ -3842,6 +3842,12 @@ public: return match_arm_patterns; } + std::unique_ptr<Expr> &get_guard_expr () + { + rust_assert (has_match_arm_guard ()); + return guard_expr; + } + Location get_locus () const { return locus; } }; diff --git a/gcc/rust/lint/rust-lint-marklive.h b/gcc/rust/lint/rust-lint-marklive.h index aeecda5..529afa6 100644 --- a/gcc/rust/lint/rust-lint-marklive.h +++ b/gcc/rust/lint/rust-lint-marklive.h @@ -204,6 +204,19 @@ public: expr.get_else_block ()->accept_vis (*this); } + void visit (HIR::MatchExpr &expr) override + { + expr.get_scrutinee_expr ()->accept_vis (*this); + std::vector<HIR::MatchCase> &cases = expr.get_match_cases (); + for (auto &&caz : cases) + { + auto case_arm = caz.get_arm (); + if (case_arm.has_match_arm_guard ()) + case_arm.get_guard_expr ()->accept_vis (*this); + caz.get_expr ()->accept_vis (*this); + } + } + void visit (HIR::IfExprConseqIf &expr) override { expr.get_if_condition ()->accept_vis (*this); diff --git a/gcc/testsuite/rust/compile/match6.rs b/gcc/testsuite/rust/compile/match6.rs new file mode 100644 index 0000000..8fe06f7 --- /dev/null +++ b/gcc/testsuite/rust/compile/match6.rs @@ -0,0 +1,18 @@ +fn foo() -> bool { + true +} + +fn int32() -> i32 { + 1 +} + +fn bar() -> i32 { + match foo() { + true => int32(), + false => 0 + } +} + +fn main() -> () { + bar(); +}
\ No newline at end of file |