@@ -400,27 +400,36 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
400
400
let expected_ty = self . structurally_resolved_type ( pat. span , expected) ;
401
401
let ( inner_ty, slice_ty) = match expected_ty. sty {
402
402
ty:: Array ( inner_ty, size) => {
403
- let size = size. unwrap_usize ( tcx) ;
404
- let min_len = before. len ( ) as u64 + after. len ( ) as u64 ;
405
- if slice. is_none ( ) {
406
- if min_len != size {
407
- struct_span_err ! (
408
- tcx. sess, pat. span, E0527 ,
409
- "pattern requires {} elements but array has {}" ,
410
- min_len, size)
411
- . span_label ( pat. span , format ! ( "expected {} elements" , size) )
403
+ if let Some ( size) = size. assert_usize ( tcx) {
404
+ let min_len = before. len ( ) as u64 + after. len ( ) as u64 ;
405
+ if slice. is_none ( ) {
406
+ if min_len != size {
407
+ struct_span_err ! (
408
+ tcx. sess, pat. span, E0527 ,
409
+ "pattern requires {} elements but array has {}" ,
410
+ min_len, size)
411
+ . span_label ( pat. span , format ! ( "expected {} elements" , size) )
412
+ . emit ( ) ;
413
+ }
414
+ ( inner_ty, tcx. types . err )
415
+ } else if let Some ( rest) = size. checked_sub ( min_len) {
416
+ ( inner_ty, tcx. mk_array ( inner_ty, rest) )
417
+ } else {
418
+ struct_span_err ! ( tcx. sess, pat. span, E0528 ,
419
+ "pattern requires at least {} elements but array has {}" ,
420
+ min_len, size)
421
+ . span_label ( pat. span ,
422
+ format ! ( "pattern cannot match array of {} elements" , size) )
412
423
. emit ( ) ;
424
+ ( inner_ty, tcx. types . err )
413
425
}
414
- ( inner_ty, tcx. types . err )
415
- } else if let Some ( rest) = size. checked_sub ( min_len) {
416
- ( inner_ty, tcx. mk_array ( inner_ty, rest) )
417
426
} else {
418
- struct_span_err ! ( tcx . sess , pat . span , E0528 ,
419
- "pattern requires at least {} elements but array has {}" ,
420
- min_len , size )
421
- . span_label ( pat . span ,
422
- format ! ( "pattern cannot match array of {} elements" , size ) )
423
- . emit ( ) ;
427
+ struct_span_err ! (
428
+ tcx . sess ,
429
+ pat . span ,
430
+ E0730 ,
431
+ " cannot pattern- match on an array without a fixed length" ,
432
+ ) . emit ( ) ;
424
433
( inner_ty, tcx. types . err )
425
434
}
426
435
}
0 commit comments