@@ -400,27 +400,36 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
400400 let expected_ty = self . structurally_resolved_type ( pat. span , expected) ;
401401 let ( inner_ty, slice_ty) = match expected_ty. sty {
402402 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) )
412423 . emit ( ) ;
424+ ( inner_ty, tcx. types . err )
413425 }
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) )
417426 } 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 ( ) ;
424433 ( inner_ty, tcx. types . err )
425434 }
426435 }
0 commit comments