diff --git a/src/librustc/infer/canonical.rs b/src/librustc/infer/canonical.rs index 4357c9a5a776a..8cb07fa6465a9 100644 --- a/src/librustc/infer/canonical.rs +++ b/src/librustc/infer/canonical.rs @@ -557,31 +557,24 @@ impl<'cx, 'gcx, 'tcx> TypeFolder<'gcx, 'tcx> for Canonicalizer<'cx, 'gcx, 'tcx> .unwrap() .borrow_region_constraints() .opportunistic_resolve_var(self.tcx, vid); - let info = CanonicalVarInfo { - kind: CanonicalVarKind::Region, - }; debug!( "canonical: region var found with vid {:?}, \ opportunistically resolved to {:?}", vid, r ); - let cvar = self.canonical_var(info, Kind::from(r)); - self.tcx().mk_region(ty::ReCanonical(cvar)) + self.canonicalize_region(r) } + ty::ReSkolemized(..) => self.canonicalize_region(r), + ty::ReStatic | ty::ReEarlyBound(..) | ty::ReFree(_) | ty::ReScope(_) - | ty::ReSkolemized(..) | ty::ReEmpty | ty::ReErased => { if self.canonicalize_all_free_regions.0 { - let info = CanonicalVarInfo { - kind: CanonicalVarKind::Region, - }; - let cvar = self.canonical_var(info, Kind::from(r)); - self.tcx().mk_region(ty::ReCanonical(cvar)) + self.canonicalize_region(r) } else { r } @@ -764,6 +757,14 @@ impl<'cx, 'gcx, 'tcx> Canonicalizer<'cx, 'gcx, 'tcx> { self.tcx().mk_infer(ty::InferTy::CanonicalTy(cvar)) } } + + fn canonicalize_region(&mut self, r: ty::Region<'tcx>) -> ty::Region<'tcx> { + let info = CanonicalVarInfo { + kind: CanonicalVarKind::Region, + }; + let cvar = self.canonical_var(info, Kind::from(r)); + self.tcx().mk_region(ty::ReCanonical(cvar)) + } } impl<'tcx, V> Canonical<'tcx, V> {