diff --git a/src/librustc_mir/hair/pattern/mod.rs b/src/librustc_mir/hair/pattern/mod.rs index 48e5ee48a024..22426defcd05 100644 --- a/src/librustc_mir/hair/pattern/mod.rs +++ b/src/librustc_mir/hair/pattern/mod.rs @@ -545,15 +545,6 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> { hir::PatKind::Slice(ref prefix, ref slice, ref suffix) => { match ty.kind { - ty::Ref(_, ty, _) => - PatKind::Deref { - subpattern: Pat { - ty, - span: pat.span, - kind: Box::new(self.slice_or_array_pattern( - pat.span, ty, prefix, slice, suffix)) - }, - }, ty::Slice(..) | ty::Array(..) => self.slice_or_array_pattern(pat.span, ty, prefix, slice, suffix), diff --git a/src/librustc_typeck/check/pat.rs b/src/librustc_typeck/check/pat.rs index 0465726c42e3..65029048b5dd 100644 --- a/src/librustc_typeck/check/pat.rs +++ b/src/librustc_typeck/check/pat.rs @@ -1176,7 +1176,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { ) -> Ty<'tcx> { let tcx = self.tcx; let expected = self.structurally_resolved_type(span, expected); - let (inner_ty, slice_ty) = match expected.kind { + let (inner_ty, slice_ty, expected) = match expected.kind { // An array, so we might have something like `let [a, b, c] = [0, 1, 2];`. ty::Array(inner_ty, size) => { let slice_ty = if let Some(size) = size.try_eval_usize(tcx, self.param_env) { @@ -1206,15 +1206,15 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { self.error_scrutinee_unfixed_length(span); tcx.types.err }; - (inner_ty, slice_ty) + (inner_ty, slice_ty, expected) } - ty::Slice(inner_ty) => (inner_ty, expected), + ty::Slice(inner_ty) => (inner_ty, expected, expected), // The expected type must be an array or slice, but was neither, so error. _ => { if !expected.references_error() { self.error_expected_array_or_slice(span, expected); } - (tcx.types.err, tcx.types.err) + (tcx.types.err, tcx.types.err, tcx.types.err) } };