Skip to content

Commit

Permalink
add an help message when using an old-style slice pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
arielb1 committed Jun 8, 2016
1 parent 5cf4139 commit fcabfa9
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
17 changes: 14 additions & 3 deletions src/librustc_typeck/check/_match.rs
Expand Up @@ -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,
"expected an array or slice, found `{}`",
expected_ty);
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)
}
Expand Down
22 changes: 22 additions & 0 deletions src/test/compile-fail/pat-slice-old-style.rs
@@ -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() {}

0 comments on commit fcabfa9

Please sign in to comment.