1
Fork 0
This commit is contained in:
lcnr 2021-08-26 11:04:01 +02:00
parent eb5bbab37b
commit 7cbfa2ee33

View file

@ -78,8 +78,11 @@ impl<'cx, 'tcx> AtExt<'tcx> for At<'cx, 'tcx> {
// The rest of the code is already set up to be lazy about replacing bound vars, // The rest of the code is already set up to be lazy about replacing bound vars,
// and only when we actually have to normalize. // and only when we actually have to normalize.
if value.has_escaping_bound_vars() { if value.has_escaping_bound_vars() {
let mut max_visitor = let mut max_visitor = MaxEscapingBoundVarVisitor {
MaxEscapingBoundVarVisitor { outer_index: ty::INNERMOST, escaping: 0 }; tcx: self.infcx.tcx,
outer_index: ty::INNERMOST,
escaping: 0,
};
value.visit_with(&mut max_visitor); value.visit_with(&mut max_visitor);
if max_visitor.escaping > 0 { if max_visitor.escaping > 0 {
normalizer.universes.extend((0..max_visitor.escaping).map(|_| None)); normalizer.universes.extend((0..max_visitor.escaping).map(|_| None));
@ -106,13 +109,18 @@ impl<'cx, 'tcx> AtExt<'tcx> for At<'cx, 'tcx> {
} }
/// Visitor to find the maximum escaping bound var /// Visitor to find the maximum escaping bound var
struct MaxEscapingBoundVarVisitor { struct MaxEscapingBoundVarVisitor<'tcx> {
tcx: TyCtxt<'tcx>,
// The index which would count as escaping // The index which would count as escaping
outer_index: ty::DebruijnIndex, outer_index: ty::DebruijnIndex,
escaping: usize, escaping: usize,
} }
impl<'tcx> TypeVisitor<'tcx> for MaxEscapingBoundVarVisitor { impl<'tcx> TypeVisitor<'tcx> for MaxEscapingBoundVarVisitor<'tcx> {
fn tcx_for_anon_const_substs(&self) -> Option<TyCtxt<'tcx>> {
Some(self.tcx)
}
fn visit_binder<T: TypeFoldable<'tcx>>( fn visit_binder<T: TypeFoldable<'tcx>>(
&mut self, &mut self,
t: &ty::Binder<'tcx, T>, t: &ty::Binder<'tcx, T>,