diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-01-20 09:37:30 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-20 09:37:30 +0100 |
| commit | bb816e67b46fe5f1c520a6ecfadfc6a393b5f84f (patch) | |
| tree | f84abd66003884096b2174877c4cc544e1b09062 | |
| parent | 862d3fe769527b67db2e060cee724be75040933f (diff) | |
| parent | 078a979229b2e68570bf736c0a48be95d1ad41a7 (diff) | |
| download | rust-bb816e67b46fe5f1c520a6ecfadfc6a393b5f84f.tar.gz rust-bb816e67b46fe5f1c520a6ecfadfc6a393b5f84f.zip | |
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`
| -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; } |
