Skip to content

Commit 5dae614

Browse files
committed
gccrs: Fix type checking logic for TuplePattern
gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-pattern.cc (visit(TuplePattern)): Fix incorrect logic for field size checking. gcc/testsuite/ChangeLog: * rust/compile/tuple_mismatch.rs: Include RestPattern in test. Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
1 parent 1f53118 commit 5dae614

2 files changed

Lines changed: 3 additions & 2 deletions

File tree

gcc/rust/typecheck/rust-hir-type-check-pattern.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -511,12 +511,12 @@ TypeCheckPattern::visit (HIR::TuplePattern &pattern)
511511
HIR::TuplePatternItemsRanged &ref
512512
= static_cast<HIR::TuplePatternItemsRanged &> (pattern.get_items ());
513513

514-
// Check whether size of lower and upper patterns <= parent size
515514
const auto &lower = ref.get_lower_patterns ();
516515
const auto &upper = ref.get_upper_patterns ();
517516
size_t min_size_required = lower.size () + upper.size ();
518517

519-
if (par.get_fields ().size () > min_size_required)
518+
// Ensure that size of lower and upper patterns <= parent size
519+
if (min_size_required > par.get_fields ().size ())
520520
{
521521
emit_pattern_size_error (pattern, par.get_fields ().size (),
522522
min_size_required);

gcc/testsuite/rust/compile/tuple_mismatch.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ fn main() {
33
let (_,) = (1, 2); // { dg-error "expected a tuple with 2 elements, found one with 1 element" }
44
let (_, _) = (1, 2, 3); // { dg-error "expected a tuple with 3 elements, found one with 2 elements" }
55
let (_, _) = (1,); // { dg-error "expected a tuple with 1 element, found one with 2 elements" }
6+
let (_, .., _) = (1,); // { dg-error "expected a tuple with 1 element, found one with 2 elements" }
67
}
78

89
// The lhs and rhs sizes don't match, but we still resolve 'a' to be bool, we don't

0 commit comments

Comments
 (0)