aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhi Heng <yapzhhg@gmail.com>2025-06-28 20:59:54 +0800
committerArthur Cohen <arthur.cohen@embecosm.com>2025-08-05 16:36:53 +0200
commit0803c00cdddb88bf9cfca5ad1958105d66cf04c7 (patch)
tree1f9de3727841f7619788caab0b0d7f80505e235a
parent794b084ba2409433a8275a979535051e96b5a4a0 (diff)
downloadgcc-0803c00cdddb88bf9cfca5ad1958105d66cf04c7.zip
gcc-0803c00cdddb88bf9cfca5ad1958105d66cf04c7.tar.gz
gcc-0803c00cdddb88bf9cfca5ad1958105d66cf04c7.tar.bz2
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>
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-pattern.cc4
-rw-r--r--gcc/testsuite/rust/compile/tuple_mismatch.rs1
2 files changed, 3 insertions, 2 deletions
diff --git a/gcc/rust/typecheck/rust-hir-type-check-pattern.cc b/gcc/rust/typecheck/rust-hir-type-check-pattern.cc
index d87916e..537c349 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-pattern.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-pattern.cc
@@ -511,12 +511,12 @@ TypeCheckPattern::visit (HIR::TuplePattern &pattern)
HIR::TuplePatternItemsRanged &ref
= static_cast<HIR::TuplePatternItemsRanged &> (pattern.get_items ());
- // Check whether size of lower and upper patterns <= parent size
const auto &lower = ref.get_lower_patterns ();
const auto &upper = ref.get_upper_patterns ();
size_t min_size_required = lower.size () + upper.size ();
- if (par.get_fields ().size () > min_size_required)
+ // Ensure that size of lower and upper patterns <= parent size
+ if (min_size_required > par.get_fields ().size ())
{
emit_pattern_size_error (pattern, par.get_fields ().size (),
min_size_required);
diff --git a/gcc/testsuite/rust/compile/tuple_mismatch.rs b/gcc/testsuite/rust/compile/tuple_mismatch.rs
index 828586b..1ff358b 100644
--- a/gcc/testsuite/rust/compile/tuple_mismatch.rs
+++ b/gcc/testsuite/rust/compile/tuple_mismatch.rs
@@ -3,6 +3,7 @@ fn main() {
let (_,) = (1, 2); // { dg-error "expected a tuple with 2 elements, found one with 1 element" }
let (_, _) = (1, 2, 3); // { dg-error "expected a tuple with 3 elements, found one with 2 elements" }
let (_, _) = (1,); // { dg-error "expected a tuple with 1 element, found one with 2 elements" }
+ let (_, .., _) = (1,); // { dg-error "expected a tuple with 1 element, found one with 2 elements" }
}
// The lhs and rhs sizes don't match, but we still resolve 'a' to be bool, we don't