fn is_123<const N: usize>(x: [u32; N]) -> bool {
match x {
- [1, 2, 3] => true, // error: cannot pattern-match on an
- // array without a fixed length
+ [1, 2, ..] => true, // error: cannot pattern-match on an
+ // array without a fixed length
_ => false
}
}
) -> Ty<'tcx> {
let err = self.tcx.types.err;
let expected = self.structurally_resolved_type(span, expected);
- let (element_ty, slice_ty, expected) = match expected.kind {
+ let (element_ty, slice_ty, inferred) = match expected.kind {
// An array, so we might have something like `let [a, b, c] = [0, 1, 2];`.
ty::Array(element_ty, len) => {
let min = before.len() as u64 + after.len() as u64;
for elt in after {
self.check_pat(&elt, element_ty, def_bm, ti);
}
- expected
+ inferred
}
/// Type check the length of an array pattern.
--- /dev/null
+#![feature(const_generics)]
+//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash
+
+fn is_123<const N: usize>(x: [u32; N]) -> bool {
+ match x {
+ [1, 2] => true, //~ ERROR mismatched types
+ _ => false
+ }
+}
+
+fn main() {}
--- /dev/null
+warning: the feature `const_generics` is incomplete and may cause the compiler to crash
+ --> $DIR/match_arr_unknown_len.rs:1:12
+ |
+LL | #![feature(const_generics)]
+ | ^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(incomplete_features)]` on by default
+
+error[E0308]: mismatched types
+ --> $DIR/match_arr_unknown_len.rs:6:9
+ |
+LL | [1, 2] => true,
+ | ^^^^^^ expected `2usize`, found `N`
+ |
+ = note: expected array `[u32; 2]`
+ found array `[u32; _]`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0308`.
fn is_123<const N: usize>(x: [u32; N]) -> bool {
match x {
- [1, 2, 3] => true, //~ ERROR mismatched types
+ [1, 2, ..] => true, //~ ERROR cannot pattern-match on an array without a fixed length
_ => false
}
}
|
= note: `#[warn(incomplete_features)]` on by default
-error[E0308]: mismatched types
+error[E0730]: cannot pattern-match on an array without a fixed length
--> $DIR/E0730.rs:6:9
|
-LL | [1, 2, 3] => true,
- | ^^^^^^^^^ expected `3usize`, found `N`
- |
- = note: expected array `[u32; 3]`
- found array `[u32; _]`
+LL | [1, 2, ..] => true,
+ | ^^^^^^^^^^
error: aborting due to previous error
-For more information about this error, try `rustc --explain E0308`.
+For more information about this error, try `rustc --explain E0730`.