Skip to content

Commit 39a990d

Browse files
committed
remove ct.has_vars_bound_at_or_above calls
`ty::Const` doesn't have precomputed type flags, so computing `has_vars_bound_at_or_above` for constants requires us to visit the const and its contained types and constants. A noop fold should be pretty much equally as fast so removing it prevents us from walking the constant twice in case it contains bound vars.
1 parent 1c7b36d commit 39a990d

File tree

2 files changed

+2
-4
lines changed

2 files changed

+2
-4
lines changed

compiler/rustc_middle/src/ty/fold.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -445,8 +445,7 @@ impl<'a, 'tcx> TypeFolder<'tcx> for BoundVarReplacer<'a, 'tcx> {
445445
let ct = (self.fld_c)(bound_const, ct.ty());
446446
ty::fold::shift_vars(self.tcx, ct, self.current_index.as_u32())
447447
}
448-
_ if ct.has_vars_bound_at_or_above(self.current_index) => ct.super_fold_with(self),
449-
_ => ct,
448+
_ => ct.super_fold_with(self),
450449
}
451450
}
452451
}

compiler/rustc_trait_selection/src/traits/project.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -753,8 +753,7 @@ impl<'tcx> TypeFolder<'tcx> for BoundVarReplacer<'_, 'tcx> {
753753
.tcx
754754
.mk_const(ty::ConstS { kind: ty::ConstKind::Placeholder(p), ty: ct.ty() })
755755
}
756-
_ if ct.has_vars_bound_at_or_above(self.current_index) => ct.super_fold_with(self),
757-
_ => ct,
756+
_ => ct.super_fold_with(self),
758757
}
759758
}
760759
}

0 commit comments

Comments
 (0)