@@ -371,43 +371,56 @@ fn check_arms<'a, 'tcx>(cx: &mut MatchCheckCtxt<'a, 'tcx>,
371
371
NotUseful => {
372
372
match source {
373
373
hir:: MatchSource :: IfLetDesugar { .. } => {
374
- if printed_if_let_err {
375
- // we already printed an irrefutable if-let pattern error.
376
- // We don't want two, that's just confusing.
374
+ if cx. tcx . features ( ) . irrefutable_let_patterns {
375
+ cx. tcx . lint_node (
376
+ lint:: builtin:: IRREFUTABLE_LET_PATTERNS ,
377
+ hir_pat. id , pat. span ,
378
+ "irrefutable if-let pattern" ) ;
377
379
} else {
378
- // find the first arm pattern so we can use its span
379
- let & ( ref first_arm_pats, _) = & arms[ 0 ] ;
380
- let first_pat = & first_arm_pats[ 0 ] ;
381
- let span = first_pat. 0 . span ;
382
- struct_span_err ! ( cx. tcx. sess, span, E0162 ,
383
- "irrefutable if-let pattern" )
384
- . span_label ( span, "irrefutable pattern" )
385
- . emit ( ) ;
386
- printed_if_let_err = true ;
380
+ if printed_if_let_err {
381
+ // we already printed an irrefutable if-let pattern error.
382
+ // We don't want two, that's just confusing.
383
+ } else {
384
+ // find the first arm pattern so we can use its span
385
+ let & ( ref first_arm_pats, _) = & arms[ 0 ] ;
386
+ let first_pat = & first_arm_pats[ 0 ] ;
387
+ let span = first_pat. 0 . span ;
388
+ struct_span_err ! ( cx. tcx. sess, span, E0162 ,
389
+ "irrefutable if-let pattern" )
390
+ . span_label ( span, "irrefutable pattern" )
391
+ . emit ( ) ;
392
+ printed_if_let_err = true ;
393
+ }
387
394
}
388
395
} ,
389
396
390
397
hir:: MatchSource :: WhileLetDesugar => {
391
- // find the first arm pattern so we can use its span
392
- let & ( ref first_arm_pats, _) = & arms[ 0 ] ;
393
- let first_pat = & first_arm_pats[ 0 ] ;
394
- let span = first_pat. 0 . span ;
395
-
396
398
// check which arm we're on.
397
399
match arm_index {
398
400
// The arm with the user-specified pattern.
399
401
0 => {
400
402
cx. tcx . lint_node (
401
- lint:: builtin:: UNREACHABLE_PATTERNS ,
403
+ lint:: builtin:: UNREACHABLE_PATTERNS ,
402
404
hir_pat. id , pat. span ,
403
405
"unreachable pattern" ) ;
404
406
} ,
405
407
// The arm with the wildcard pattern.
406
408
1 => {
407
- struct_span_err ! ( cx. tcx. sess, span, E0165 ,
408
- "irrefutable while-let pattern" )
409
- . span_label ( span, "irrefutable pattern" )
410
- . emit ( ) ;
409
+ if cx. tcx . features ( ) . irrefutable_let_patterns {
410
+ cx. tcx . lint_node (
411
+ lint:: builtin:: IRREFUTABLE_LET_PATTERNS ,
412
+ hir_pat. id , pat. span ,
413
+ "irrefutable while-let pattern" ) ;
414
+ } else {
415
+ // find the first arm pattern so we can use its span
416
+ let & ( ref first_arm_pats, _) = & arms[ 0 ] ;
417
+ let first_pat = & first_arm_pats[ 0 ] ;
418
+ let span = first_pat. 0 . span ;
419
+ struct_span_err ! ( cx. tcx. sess, span, E0165 ,
420
+ "irrefutable while-let pattern" )
421
+ . span_label ( span, "irrefutable pattern" )
422
+ . emit ( ) ;
423
+ }
411
424
} ,
412
425
_ => bug ! ( ) ,
413
426
}
0 commit comments