Rollup merge of #120155 - compiler-errors:no-erased-when-promoting, r=aliemjay
Don't use `ReErased` to detect type test promotion failed Using `ReErased` here is convenient because it implicitly stores the state that we are explicitly recording with the `failed` variable now, but I also think it adds a tiny bit of complexity that is not worth it. r? `@aliemjay`
This commit is contained in:
commit
bb816e67b4
@ -18,7 +18,7 @@
|
|||||||
};
|
};
|
||||||
use rustc_middle::traits::ObligationCause;
|
use rustc_middle::traits::ObligationCause;
|
||||||
use rustc_middle::traits::ObligationCauseCode;
|
use rustc_middle::traits::ObligationCauseCode;
|
||||||
use rustc_middle::ty::{self, RegionVid, Ty, TyCtxt, TypeFoldable, TypeVisitableExt};
|
use rustc_middle::ty::{self, RegionVid, Ty, TyCtxt, TypeFoldable};
|
||||||
use rustc_mir_dataflow::points::DenseLocationMap;
|
use rustc_mir_dataflow::points::DenseLocationMap;
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
|
|
||||||
@ -1145,6 +1145,7 @@ fn fold_ty(&mut self, t: Ty<'tcx>) -> Ty<'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let ty = ty.fold_with(&mut OpaqueFolder { tcx });
|
let ty = ty.fold_with(&mut OpaqueFolder { tcx });
|
||||||
|
let mut failed = false;
|
||||||
|
|
||||||
let ty = tcx.fold_regions(ty, |r, _depth| {
|
let ty = tcx.fold_regions(ty, |r, _depth| {
|
||||||
let r_vid = self.to_region_vid(r);
|
let r_vid = self.to_region_vid(r);
|
||||||
@ -1160,15 +1161,18 @@ fn fold_ty(&mut self, t: Ty<'tcx>) -> Ty<'tcx> {
|
|||||||
.filter(|&u_r| !self.universal_regions.is_local_free_region(u_r))
|
.filter(|&u_r| !self.universal_regions.is_local_free_region(u_r))
|
||||||
.find(|&u_r| self.eval_equal(u_r, r_vid))
|
.find(|&u_r| self.eval_equal(u_r, r_vid))
|
||||||
.map(|u_r| ty::Region::new_var(tcx, u_r))
|
.map(|u_r| ty::Region::new_var(tcx, u_r))
|
||||||
// In the case of a failure, use `ReErased`. We will eventually
|
// In case we could not find a named region to map to,
|
||||||
// return `None` in this case.
|
// we will return `None` below.
|
||||||
.unwrap_or(tcx.lifetimes.re_erased)
|
.unwrap_or_else(|| {
|
||||||
|
failed = true;
|
||||||
|
r
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
debug!("try_promote_type_test_subject: folded ty = {:?}", ty);
|
debug!("try_promote_type_test_subject: folded ty = {:?}", ty);
|
||||||
|
|
||||||
// This will be true if we failed to promote some region.
|
// This will be true if we failed to promote some region.
|
||||||
if ty.has_erased_regions() {
|
if failed {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user