diff --git a/clippy_lints/src/needless_pass_by_value.rs b/clippy_lints/src/needless_pass_by_value.rs index 29598a20f0d..3c1f6ef2c4b 100644 --- a/clippy_lints/src/needless_pass_by_value.rs +++ b/clippy_lints/src/needless_pass_by_value.rs @@ -89,15 +89,14 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NeedlessPassByValue { let preds = traits::elaborate_predicates(cx.tcx, cx.param_env.caller_bounds.to_vec()) .filter(|p| !p.is_global()) - .collect::>(); - let preds = preds - .iter() - .filter_map(|pred| if let ty::Predicate::Trait(ref poly_trait_ref) = *pred { - Some(poly_trait_ref.skip_binder()) + .filter_map(|pred| if let ty::Predicate::Trait(poly_trait_ref) = pred { + if poly_trait_ref.def_id() == sized_trait || poly_trait_ref.skip_binder().has_escaping_regions() { + return None; + } + Some(poly_trait_ref) } else { None }) - .filter(|t| t.def_id() != sized_trait && !t.has_escaping_regions()) .collect::>(); // Collect moved variables and spans which will need dereferencings from the @@ -128,7 +127,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NeedlessPassByValue { let (implements_borrow_trait, all_borrowable_trait) = { let preds = preds .iter() - .filter(|t| t.self_ty() == ty) + .filter(|t| t.skip_binder().self_ty() == ty) .collect::>(); ( @@ -138,7 +137,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NeedlessPassByValue { cx, cx.tcx.mk_imm_ref(&RegionKind::ReErased, ty), t.def_id(), - &t.input_types().skip(1).collect::>(), + &t.skip_binder().input_types().skip(1).collect::>(), ) }), )