Don't normalize constants unless they need normalization

This commit is contained in:
Michael Goulet 2022-11-06 17:14:05 +00:00
parent 7eef946fc0
commit 152646f23f
2 changed files with 5 additions and 1 deletions

View File

@ -647,7 +647,7 @@ fn fold_ty(&mut self, ty: Ty<'tcx>) -> Ty<'tcx> {
#[instrument(skip(self), level = "debug")] #[instrument(skip(self), level = "debug")]
fn fold_const(&mut self, constant: ty::Const<'tcx>) -> ty::Const<'tcx> { fn fold_const(&mut self, constant: ty::Const<'tcx>) -> ty::Const<'tcx> {
let tcx = self.selcx.tcx(); let tcx = self.selcx.tcx();
if tcx.lazy_normalization() { if tcx.lazy_normalization() || !needs_normalization(&constant, self.param_env.reveal()) {
constant constant
} else { } else {
let constant = constant.super_fold_with(self); let constant = constant.super_fold_with(self);

View File

@ -353,6 +353,10 @@ fn try_fold_const(
&mut self, &mut self,
constant: ty::Const<'tcx>, constant: ty::Const<'tcx>,
) -> Result<ty::Const<'tcx>, Self::Error> { ) -> Result<ty::Const<'tcx>, Self::Error> {
if !needs_normalization(&constant, self.param_env.reveal()) {
return Ok(constant);
}
let constant = constant.try_super_fold_with(self)?; let constant = constant.try_super_fold_with(self)?;
debug!(?constant, ?self.param_env); debug!(?constant, ?self.param_env);
Ok(crate::traits::project::with_replaced_escaping_bound_vars( Ok(crate::traits::project::with_replaced_escaping_bound_vars(