diff options
author | Mahmoud Mohamed <mahadelr19@gmail.com> | 2023-03-16 14:53:44 +0300 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2023-03-17 16:30:46 +0000 |
commit | dd4038083ef08ce8e8456261389d4b26f5dd7ace (patch) | |
tree | eaafb2d60f06131687e1d82731347e03d230e15a /gcc/rust/resolve/rust-ast-resolve-expr.cc | |
parent | 7334fb00e9cf2c8adfe2a197087652f5af451614 (diff) | |
download | gcc-dd4038083ef08ce8e8456261389d4b26f5dd7ace.zip gcc-dd4038083ef08ce8e8456261389d4b26f5dd7ace.tar.gz gcc-dd4038083ef08ce8e8456261389d4b26f5dd7ace.tar.bz2 |
resolve: Fix multiple bindings handling in match
gcc/rust/ChangeLog:
* resolve/rust-ast-resolve-expr.cc (ResolveExpr::visit):
Push a Product context instead of an Or context.
gcc/testsuite/ChangeLog:
* rust/compile/multiple_bindings2.rs: New test.
Signed-off-by: Mahmoud Mohamed <mahadelr19@gmail.com>
Diffstat (limited to 'gcc/rust/resolve/rust-ast-resolve-expr.cc')
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-expr.cc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-expr.cc b/gcc/rust/resolve/rust-ast-resolve-expr.cc index ff9f7ef..a6b16f3 100644 --- a/gcc/rust/resolve/rust-ast-resolve-expr.cc +++ b/gcc/rust/resolve/rust-ast-resolve-expr.cc @@ -207,10 +207,10 @@ ResolveExpr::visit (AST::IfLetExpr &expr) resolver->push_new_type_rib (resolver->get_type_scope ().peek ()); resolver->push_new_label_rib (resolver->get_type_scope ().peek ()); - // FIXME: this declaration should be removed after refactoring - // parse_match_arm_patterns output into an AltPattern + // We know expr.get_patterns () has one pattern at most + // so there's no reason to handle it like an AltPattern. std::vector<PatternBinding> bindings - = {PatternBinding (PatternBoundCtx::Or, std::set<Identifier> ())}; + = {PatternBinding (PatternBoundCtx::Product, std::set<Identifier> ())}; for (auto &pattern : expr.get_patterns ()) { @@ -522,10 +522,10 @@ ResolveExpr::visit (AST::MatchExpr &expr) ResolveExpr::go (arm.get_guard_expr ().get (), prefix, canonical_prefix); - // FIXME: this declaration should be removed after refactoring - // parse_match_arms_patterns output into a single AltPattern + // We know expr.get_patterns () has one pattern at most + // so there's no reason to handle it like an AltPattern. std::vector<PatternBinding> bindings - = {PatternBinding (PatternBoundCtx::Or, std::set<Identifier> ())}; + = {PatternBinding (PatternBoundCtx::Product, std::set<Identifier> ())}; // insert any possible new patterns for (auto &pattern : arm.get_patterns ()) |