diff --git a/src/librustc_mir/borrow_check/nll/type_check/mod.rs b/src/librustc_mir/borrow_check/nll/type_check/mod.rs index 98e31d75c980..d68175de9ddc 100644 --- a/src/librustc_mir/borrow_check/nll/type_check/mod.rs +++ b/src/librustc_mir/borrow_check/nll/type_check/mod.rs @@ -275,7 +275,7 @@ impl<'a, 'b, 'gcx, 'tcx> TypeVerifier<'a, 'b, 'gcx, 'tcx> { tcx.predicates_of(def_id).instantiate(tcx, substs); let predicates = type_checker.normalize(&instantiated_predicates.predicates, location); - type_checker.prove_predicates(&predicates, location); + type_checker.prove_predicates(predicates.iter().cloned(), location); } value.ty @@ -1511,28 +1511,35 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> { let predicates = self.normalize(&instantiated_predicates.predicates, location); debug!("prove_aggregate_predicates: predicates={:?}", predicates); - self.prove_predicates(&predicates, location); + self.prove_predicates(predicates.iter().cloned(), location); } fn prove_trait_ref(&mut self, trait_ref: ty::TraitRef<'tcx>, location: Location) { self.prove_predicates( - &[ty::Predicate::Trait( + [ty::Predicate::Trait( trait_ref.to_poly_trait_ref().to_poly_trait_predicate(), - )], + )].iter() + .cloned(), location, ); } - fn prove_predicates(&mut self, predicates: &[ty::Predicate<'tcx>], location: Location) { + fn prove_predicates( + &mut self, + predicates: impl IntoIterator>, + location: Location, + ) { + let mut predicates_iter = predicates.into_iter(); + debug!( "prove_predicates(predicates={:?}, location={:?})", - predicates, location + predicates_iter.by_ref().collect::>(), + location ); self.fully_perform_op(location.at_self(), |this| { let cause = this.misc(this.last_span); - let obligations = predicates - .iter() - .map(|&p| traits::Obligation::new(cause.clone(), this.param_env, p)) + let obligations = predicates_iter + .map(|p| traits::Obligation::new(cause.clone(), this.param_env, p)) .collect(); Ok(InferOk { value: (),