]> git.lizzy.rs Git - rust.git/commitdiff
add an help message when using an old-style slice pattern
authorAriel Ben-Yehuda <ariel.byd@gmail.com>
Tue, 7 Jun 2016 10:13:20 +0000 (13:13 +0300)
committerAriel Ben-Yehuda <ariel.byd@gmail.com>
Wed, 8 Jun 2016 21:38:38 +0000 (00:38 +0300)
src/librustc_typeck/check/_match.rs
src/test/compile-fail/pat-slice-old-style.rs [new file with mode: 0644]

index 2fbeb43b8a3a517df2770d60edf5757ab2fecf17..0430585fe6d0be46eefc8375f48b77d1fc68fb10 100644 (file)
@@ -345,9 +345,20 @@ pub fn check_pat(&self, pat: &'gcx hir::Pat, expected: Ty<'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)
                     }
diff --git a/src/test/compile-fail/pat-slice-old-style.rs b/src/test/compile-fail/pat-slice-old-style.rs
new file mode 100644 (file)
index 0000000..ccb25d8
--- /dev/null
@@ -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() {}