add an help message when using an old-style slice pattern

This commit is contained in:
Ariel Ben-Yehuda 2016-06-07 13:13:20 +03:00
parent 5cf4139d21
commit fcabfa9735
2 changed files with 36 additions and 3 deletions

View File

@ -345,9 +345,20 @@ impl<'a, 'gcx, 'tcx> PatCtxt<'a, 'gcx, 'tcx> {
ty::TySlice(inner_ty) => (inner_ty, expected_ty),
_ => {
if !expected_ty.references_error() {
span_err!(tcx.sess, pat.span, E0529,
let mut err = struct_span_err!(
tcx.sess, pat.span, E0529,
"expected an array or slice, found `{}`",
expected_ty);
if let ty::TyRef(_, ty::TypeAndMut { mutbl: _, ty }) = expected_ty.sty {
match ty.sty {
ty::TyArray(..) | ty::TySlice(..) => {
err.help("the semantics of slice patterns changed \
recently; see issue #23121");
}
_ => {}
}
}
err.emit();
}
(tcx.types.err, tcx.types.err)
}

View File

@ -0,0 +1,22 @@
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(slice_patterns)]
fn slice_pat(x: &[u8]) {
// OLD!
match x {
[a, b..] => {}
//~^ ERROR expected an array or slice, found `&[u8]`
//~| HELP the semantics of slice patterns changed recently; see issue #23121
}
}
fn main() {}