]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Fix type checking logic for TuplePattern
authorZhi Heng <yapzhhg@gmail.com>
Sat, 28 Jun 2025 12:59:54 +0000 (20:59 +0800)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 5 Aug 2025 14:36:53 +0000 (16:36 +0200)
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>
gcc/rust/typecheck/rust-hir-type-check-pattern.cc
gcc/testsuite/rust/compile/tuple_mismatch.rs

index d87916ec7985a5626b5632b2177321b657e76b2c..537c3491265ba8b47792390cf517900f9b6f2e33 100644 (file)
@@ -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);
index 828586b0f09d6acde402baff16c2b28ce3b91adb..1ff358be60a12ab7692546299876a0fcfb7bf286 100644 (file)
@@ -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