File tree 2 files changed +28
-1
lines changed 2 files changed +28
-1
lines changed Original file line number Diff line number Diff line change @@ -42,7 +42,7 @@ impl<'a> InferenceContext<'a> {
42
42
Some ( idx) => subpats. split_at ( idx) ,
43
43
None => ( subpats, & [ ] [ ..] ) ,
44
44
} ;
45
- let post_idx_offset = field_tys. iter ( ) . count ( ) - post. len ( ) ;
45
+ let post_idx_offset = field_tys. iter ( ) . count ( ) . saturating_sub ( post. len ( ) ) ;
46
46
47
47
let pre_iter = pre. iter ( ) . enumerate ( ) ;
48
48
let post_iter = ( post_idx_offset..) . zip ( post. iter ( ) ) ;
Original file line number Diff line number Diff line change @@ -1620,3 +1620,30 @@ pub trait Destruct {}
1620
1620
"# ,
1621
1621
) ;
1622
1622
}
1623
+
1624
+ #[ test]
1625
+ fn tuple_struct_pattern_with_unmatched_args_crash ( ) {
1626
+ check_infer (
1627
+ r#"
1628
+ struct S(usize);
1629
+ fn main() {
1630
+ let S(.., a, b) = S(1);
1631
+ let (.., a, b) = (1,);
1632
+ }
1633
+ "# ,
1634
+ expect ! [ [ r#"
1635
+ 27..85 '{ ...1,); }': ()
1636
+ 37..48 'S(.., a, b)': S
1637
+ 43..44 'a': usize
1638
+ 46..47 'b': {unknown}
1639
+ 51..52 'S': S(usize) -> S
1640
+ 51..55 'S(1)': S
1641
+ 53..54 '1': usize
1642
+ 65..75 '(.., a, b)': (i32, {unknown})
1643
+ 70..71 'a': i32
1644
+ 73..74 'b': {unknown}
1645
+ 78..82 '(1,)': (i32,)
1646
+ 79..80 '1': i32
1647
+ "# ] ] ,
1648
+ ) ;
1649
+ }
You can’t perform that action at this time.
0 commit comments