1
Fork 0

inliner: Use substs_for_mir_body

Changes from 68965 extended the kind of instances that are being
inlined. For some of those, the `instance_mir` returns a MIR body that
is already expressed in terms of the types found in substitution array,
and doesn't need further substitution.

Use `substs_for_mir_body` to take that into account.
This commit is contained in:
Tomasz Miąsko 2020-11-06 00:00:00 +00:00
parent 6e96e10f93
commit f7e11cba36

View file

@ -361,13 +361,11 @@ impl<'tcx, M: Module> FunctionCx<'_, 'tcx, M> {
where where
T: TypeFoldable<'tcx> + Copy, T: TypeFoldable<'tcx> + Copy,
{ {
if let Some(substs) = self.instance.substs_for_mir_body() { self.instance.subst_mir_and_normalize_erasing_regions(
self.tcx self.tcx,
.subst_and_normalize_erasing_regions(substs, ty::ParamEnv::reveal_all(), value) ty::ParamEnv::reveal_all(),
} else { value
self.tcx )
.normalize_erasing_regions(ty::ParamEnv::reveal_all(), *value)
}
} }
pub(crate) fn clif_type(&self, ty: Ty<'tcx>) -> Option<Type> { pub(crate) fn clif_type(&self, ty: Ty<'tcx>) -> Option<Type> {