From 6c1b6ad047a4878b1e0317a3306ab988a84707dc Mon Sep 17 00:00:00 2001 From: Lzu Tao Date: Tue, 6 Aug 2019 10:37:48 +0700 Subject: [PATCH] Rustup https://github.com/rust-lang/rust/pull/59369 --- clippy_lints/src/consts.rs | 4 +++- clippy_lints/src/indexing_slicing.rs | 2 +- clippy_lints/src/loops.rs | 7 ++++--- clippy_lints/src/methods/mod.rs | 6 +++++- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/clippy_lints/src/consts.rs b/clippy_lints/src/consts.rs index 9d1cc110e5d4..f4fd79cf925e 100644 --- a/clippy_lints/src/consts.rs +++ b/clippy_lints/src/consts.rs @@ -230,7 +230,9 @@ impl<'c, 'cc> ConstEvalLateContext<'c, 'cc> { ExprKind::Tup(ref tup) => self.multi(tup).map(Constant::Tuple), ExprKind::Repeat(ref value, _) => { let n = match self.tables.expr_ty(e).sty { - ty::Array(_, n) => n.assert_usize(self.lcx.tcx).expect("array length"), + ty::Array(_, n) => n + .try_eval_usize(self.lcx.tcx, ty::ParamEnv::empty()) + .expect("array length"), _ => span_bug!(e.span, "typeck error"), }; self.expr(value).map(|v| Constant::Repeat(Box::new(v), n)) diff --git a/clippy_lints/src/indexing_slicing.rs b/clippy_lints/src/indexing_slicing.rs index 06e5458c185e..f167d7eef9fc 100644 --- a/clippy_lints/src/indexing_slicing.rs +++ b/clippy_lints/src/indexing_slicing.rs @@ -94,7 +94,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for IndexingSlicing { if let Some(range) = higher::range(cx, index) { // Ranged indexes, i.e., &x[n..m], &x[n..], &x[..n] and &x[..] if let ty::Array(_, s) = ty.sty { - let size: u128 = s.assert_usize(cx.tcx).unwrap().into(); + let size: u128 = s.try_eval_usize(cx.tcx, ty::ParamEnv::empty()).unwrap().into(); let const_range = to_const_range(cx, range, size); diff --git a/clippy_lints/src/loops.rs b/clippy_lints/src/loops.rs index 7a5ac47b6e75..81a5a04175b5 100644 --- a/clippy_lints/src/loops.rs +++ b/clippy_lints/src/loops.rs @@ -1253,7 +1253,7 @@ fn is_end_eq_array_len<'tcx>( if let ExprKind::Lit(ref lit) = end.node; if let ast::LitKind::Int(end_int, _) = lit.node; if let ty::Array(_, arr_len_const) = indexed_ty.sty; - if let Some(arr_len) = arr_len_const.assert_usize(cx.tcx); + if let Some(arr_len) = arr_len_const.try_eval_usize(cx.tcx, ty::ParamEnv::empty()); then { return match limits { ast::RangeLimits::Closed => end_int + 1 >= arr_len.into(), @@ -1375,7 +1375,8 @@ fn check_for_loop_arg(cx: &LateContext<'_, '_>, pat: &Pat, arg: &Expr, expr: &Ex match cx.tables.expr_ty(&args[0]).sty { // If the length is greater than 32 no traits are implemented for array and // therefore we cannot use `&`. - ty::Array(_, size) if size.assert_usize(cx.tcx).expect("array size") > 32 => (), + ty::Array(_, size) + if size.try_eval_usize(cx.tcx, ty::ParamEnv::empty()).expect("array size") > 32 => {}, _ => lint_iter_method(cx, args, arg, method_name), }; } else { @@ -1988,7 +1989,7 @@ fn is_ref_iterable_type(cx: &LateContext<'_, '_>, e: &Expr) -> bool { fn is_iterable_array<'tcx>(ty: Ty<'tcx>, cx: &LateContext<'_, 'tcx>) -> bool { // IntoIterator is currently only implemented for array sizes <= 32 in rustc match ty.sty { - ty::Array(_, n) => (0..=32).contains(&n.assert_usize(cx.tcx).expect("array length")), + ty::Array(_, n) => (0..=32).contains(&n.try_eval_usize(cx.tcx, ty::ParamEnv::empty()).expect("array length")), _ => false, } } diff --git a/clippy_lints/src/methods/mod.rs b/clippy_lints/src/methods/mod.rs index 5bb5ebc83a4d..48cc4e98d2c7 100644 --- a/clippy_lints/src/methods/mod.rs +++ b/clippy_lints/src/methods/mod.rs @@ -1825,7 +1825,11 @@ fn derefs_to_slice<'a, 'tcx>( ty::Slice(_) => true, ty::Adt(def, _) if def.is_box() => may_slice(cx, ty.boxed_ty()), ty::Adt(..) => match_type(cx, ty, &paths::VEC), - ty::Array(_, size) => size.assert_usize(cx.tcx).expect("array length") < 32, + ty::Array(_, size) => { + size.try_eval_usize(cx.tcx, ty::ParamEnv::empty()) + .expect("array length") + < 32 + }, ty::Ref(_, inner, _) => may_slice(cx, inner), _ => false, }