diff options
| author | Michael Goulet <michael@errs.io> | 2024-01-20 02:33:49 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2024-01-20 02:35:08 +0000 |
| commit | 078a979229b2e68570bf736c0a48be95d1ad41a7 (patch) | |
| tree | 2dfabb5bca5c796b1eb0a37521a8ce2d4a0de683 | |
| parent | 32ec40c68533f325a3c8fe787b77ef5c9e209b23 (diff) | |
| download | rust-078a979229b2e68570bf736c0a48be95d1ad41a7.tar.gz rust-078a979229b2e68570bf736c0a48be95d1ad41a7.zip | |
Don't use ReErased to detect type test promotion failed
| -rw-r--r-- | compiler/rustc_borrowck/src/region_infer/mod.rs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/compiler/rustc_borrowck/src/region_infer/mod.rs b/compiler/rustc_borrowck/src/region_infer/mod.rs index cbf01feae06..89b203f80a4 100644 --- a/compiler/rustc_borrowck/src/region_infer/mod.rs +++ b/compiler/rustc_borrowck/src/region_infer/mod.rs @@ -18,7 +18,7 @@ use rustc_middle::mir::{ }; use rustc_middle::traits::ObligationCause; 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_span::Span; @@ -1145,6 +1145,7 @@ impl<'tcx> RegionInferenceContext<'tcx> { } let ty = ty.fold_with(&mut OpaqueFolder { tcx }); + let mut failed = false; let ty = tcx.fold_regions(ty, |r, _depth| { let r_vid = self.to_region_vid(r); @@ -1160,15 +1161,18 @@ impl<'tcx> RegionInferenceContext<'tcx> { .filter(|&u_r| !self.universal_regions.is_local_free_region(u_r)) .find(|&u_r| self.eval_equal(u_r, r_vid)) .map(|u_r| ty::Region::new_var(tcx, u_r)) - // In the case of a failure, use `ReErased`. We will eventually - // return `None` in this case. - .unwrap_or(tcx.lifetimes.re_erased) + // In case we could not find a named region to map to, + // we will return `None` below. + .unwrap_or_else(|| { + failed = true; + r + }) }); debug!("try_promote_type_test_subject: folded ty = {:?}", ty); // This will be true if we failed to promote some region. - if ty.has_erased_regions() { + if failed { return None; } |
