diff options
| author | Andrew Cann <shum@canndrew.org> | 2017-02-04 16:27:45 +0800 |
|---|---|---|
| committer | Andrew Cann <shum@canndrew.org> | 2017-02-04 16:27:45 +0800 |
| commit | a1f42cd8930d465bf616d5b2bc5d7b1b945177ab (patch) | |
| tree | f09e38db0ac236a084017c0c44d848fd47f06f1c /src/librustc_const_eval | |
| parent | c781fc4a6a8af287f7abe141f035a638bc0165c3 (diff) | |
| download | rust-a1f42cd8930d465bf616d5b2bc5d7b1b945177ab.tar.gz rust-a1f42cd8930d465bf616d5b2bc5d7b1b945177ab.zip | |
Uninhabited while-let pattern fix
Diffstat (limited to 'src/librustc_const_eval')
| -rw-r--r-- | src/librustc_const_eval/check_match.rs | 19 | ||||
| -rw-r--r-- | src/librustc_const_eval/lib.rs | 1 |
2 files changed, 16 insertions, 4 deletions
diff --git a/src/librustc_const_eval/check_match.rs b/src/librustc_const_eval/check_match.rs index 0b1f2465a4d..ce478f1a450 100644 --- a/src/librustc_const_eval/check_match.rs +++ b/src/librustc_const_eval/check_match.rs @@ -8,6 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +use std::ptr; use _match::{MatchCheckCtxt, Matrix, expand_pattern, is_useful}; use _match::Usefulness::*; use _match::WitnessPreference::*; @@ -302,10 +303,20 @@ fn check_arms<'a, 'tcx>(cx: &mut MatchCheckCtxt<'a, 'tcx>, let &(ref first_arm_pats, _) = &arms[0]; let first_pat = &first_arm_pats[0]; let span = first_pat.0.span; - struct_span_err!(cx.tcx.sess, span, E0165, - "irrefutable while-let pattern") - .span_label(span, &format!("irrefutable pattern")) - .emit(); + + // check which arm we're on. + if ptr::eq(first_arm_pats, pats) { + let mut diagnostic = Diagnostic::new(Level::Warning, + "unreachable pattern"); + diagnostic.set_span(pat.span); + cx.tcx.sess.add_lint_diagnostic(lint::builtin::UNREACHABLE_PATTERNS, + hir_pat.id, diagnostic); + } else { + struct_span_err!(cx.tcx.sess, span, E0165, + "irrefutable while-let pattern") + .span_label(span, &format!("irrefutable pattern")) + .emit(); + } }, hir::MatchSource::ForLoopDesugar | diff --git a/src/librustc_const_eval/lib.rs b/src/librustc_const_eval/lib.rs index 198e49daabc..7c579f44e79 100644 --- a/src/librustc_const_eval/lib.rs +++ b/src/librustc_const_eval/lib.rs @@ -30,6 +30,7 @@ #![feature(box_syntax)] #![feature(const_fn)] #![feature(i128_type)] +#![feature(ptr_eq)] extern crate arena; #[macro_use] extern crate syntax; |
