remove inside_canonicalization_ctxt
flag
we never reach the code checking for this flag while the flag is enabled, so it does not change the behavior of the code.
This commit is contained in:
parent
6bb1f792db
commit
0c5fe37786
5 changed files with 13 additions and 45 deletions
|
@ -498,11 +498,11 @@ impl<'cx, 'tcx> BorrowckInferCtxt<'cx, 'tcx> {
|
|||
let next_region = self.infcx.next_region_var(origin);
|
||||
let vid = next_region.as_var();
|
||||
|
||||
if cfg!(debug_assertions) && !self.inside_canonicalization_ctxt() {
|
||||
if cfg!(debug_assertions) {
|
||||
debug!("inserting vid {:?} with origin {:?} into var_to_origin", vid, origin);
|
||||
let ctxt = get_ctxt_fn();
|
||||
let mut var_to_origin = self.reg_var_to_origin.borrow_mut();
|
||||
var_to_origin.insert(vid, ctxt);
|
||||
assert_eq!(var_to_origin.insert(vid, ctxt), None);
|
||||
}
|
||||
|
||||
next_region
|
||||
|
@ -520,11 +520,11 @@ impl<'cx, 'tcx> BorrowckInferCtxt<'cx, 'tcx> {
|
|||
let next_region = self.infcx.next_nll_region_var(origin);
|
||||
let vid = next_region.as_var();
|
||||
|
||||
if cfg!(debug_assertions) && !self.inside_canonicalization_ctxt() {
|
||||
if cfg!(debug_assertions) {
|
||||
debug!("inserting vid {:?} with origin {:?} into var_to_origin", vid, origin);
|
||||
let ctxt = get_ctxt_fn();
|
||||
let mut var_to_origin = self.reg_var_to_origin.borrow_mut();
|
||||
var_to_origin.insert(vid, ctxt);
|
||||
assert_eq!(var_to_origin.insert(vid, ctxt), None);
|
||||
}
|
||||
|
||||
next_region
|
||||
|
|
|
@ -131,9 +131,13 @@ impl<'tcx> TypeRelatingDelegate<'tcx> for NllTypeRelatingDelegate<'_, '_, 'tcx>
|
|||
ty::BoundRegionKind::BrEnv => BoundRegionInfo::Name(sym::env),
|
||||
};
|
||||
|
||||
if cfg!(debug_assertions) && !self.type_checker.infcx.inside_canonicalization_ctxt() {
|
||||
if cfg!(debug_assertions) {
|
||||
let mut var_to_origin = self.type_checker.infcx.reg_var_to_origin.borrow_mut();
|
||||
var_to_origin.insert(reg.as_var(), RegionCtxt::Placeholder(reg_info));
|
||||
let new = RegionCtxt::Placeholder(reg_info);
|
||||
let prev = var_to_origin.insert(reg.as_var(), new);
|
||||
if let Some(prev) = prev {
|
||||
assert_eq!(new, prev);
|
||||
}
|
||||
}
|
||||
|
||||
reg
|
||||
|
@ -146,9 +150,10 @@ impl<'tcx> TypeRelatingDelegate<'tcx> for NllTypeRelatingDelegate<'_, '_, 'tcx>
|
|||
universe,
|
||||
);
|
||||
|
||||
if cfg!(debug_assertions) && !self.type_checker.infcx.inside_canonicalization_ctxt() {
|
||||
if cfg!(debug_assertions) {
|
||||
let mut var_to_origin = self.type_checker.infcx.reg_var_to_origin.borrow_mut();
|
||||
var_to_origin.insert(reg.as_var(), RegionCtxt::Existential(None));
|
||||
let prev = var_to_origin.insert(reg.as_var(), RegionCtxt::Existential(None));
|
||||
assert_eq!(prev, None);
|
||||
}
|
||||
|
||||
reg
|
||||
|
|
|
@ -30,8 +30,6 @@ use super::*;
|
|||
use rustc_middle::ty::relate::{Relate, TypeRelation};
|
||||
use rustc_middle::ty::{Const, ImplSubject};
|
||||
|
||||
use std::cell::Cell;
|
||||
|
||||
/// Whether we should define opaque types or just treat them opaquely.
|
||||
///
|
||||
/// Currently only used to prevent predicate matching from matching anything
|
||||
|
@ -84,7 +82,6 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||
in_snapshot: self.in_snapshot.clone(),
|
||||
universe: self.universe.clone(),
|
||||
intercrate: self.intercrate,
|
||||
inside_canonicalization_ctxt: Cell::new(self.inside_canonicalization_ctxt()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -561,8 +561,6 @@ impl<'cx, 'tcx> Canonicalizer<'cx, 'tcx> {
|
|||
where
|
||||
V: TypeFoldable<TyCtxt<'tcx>>,
|
||||
{
|
||||
let _inside_canonical_ctxt_guard = infcx.set_canonicalization_ctxt();
|
||||
|
||||
let needs_canonical_flags = if canonicalize_region_mode.any() {
|
||||
TypeFlags::HAS_INFER |
|
||||
TypeFlags::HAS_FREE_REGIONS | // `HAS_RE_PLACEHOLDER` implies `HAS_FREE_REGIONS`
|
||||
|
|
|
@ -39,7 +39,6 @@ use rustc_span::Span;
|
|||
|
||||
use std::cell::{Cell, RefCell};
|
||||
use std::fmt;
|
||||
use std::ops::Drop;
|
||||
|
||||
use self::combine::CombineFields;
|
||||
use self::error_reporting::TypeErrCtxt;
|
||||
|
@ -342,11 +341,6 @@ pub struct InferCtxt<'tcx> {
|
|||
/// there is no type that the user could *actually name* that
|
||||
/// would satisfy it. This avoids crippling inference, basically.
|
||||
pub intercrate: bool,
|
||||
|
||||
/// Flag that is set when we enter canonicalization. Used for debugging to ensure
|
||||
/// that we only collect region information for `BorrowckInferCtxt::reg_var_to_origin`
|
||||
/// inside non-canonicalization contexts.
|
||||
inside_canonicalization_ctxt: Cell<bool>,
|
||||
}
|
||||
|
||||
/// See the `error_reporting` module for more details.
|
||||
|
@ -638,7 +632,6 @@ impl<'tcx> InferCtxtBuilder<'tcx> {
|
|||
skip_leak_check: Cell::new(false),
|
||||
universe: Cell::new(ty::UniverseIndex::ROOT),
|
||||
intercrate,
|
||||
inside_canonicalization_ctxt: Cell::new(false),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1636,31 +1629,6 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn inside_canonicalization_ctxt(&self) -> bool {
|
||||
self.inside_canonicalization_ctxt.get()
|
||||
}
|
||||
|
||||
pub fn set_canonicalization_ctxt(&self) -> CanonicalizationCtxtGuard<'_, 'tcx> {
|
||||
let prev_ctxt = self.inside_canonicalization_ctxt();
|
||||
self.inside_canonicalization_ctxt.set(true);
|
||||
CanonicalizationCtxtGuard { prev_ctxt, infcx: self }
|
||||
}
|
||||
|
||||
fn set_canonicalization_ctxt_to(&self, ctxt: bool) {
|
||||
self.inside_canonicalization_ctxt.set(ctxt);
|
||||
}
|
||||
}
|
||||
|
||||
pub struct CanonicalizationCtxtGuard<'cx, 'tcx> {
|
||||
prev_ctxt: bool,
|
||||
infcx: &'cx InferCtxt<'tcx>,
|
||||
}
|
||||
|
||||
impl<'cx, 'tcx> Drop for CanonicalizationCtxtGuard<'cx, 'tcx> {
|
||||
fn drop(&mut self) {
|
||||
self.infcx.set_canonicalization_ctxt_to(self.prev_ctxt)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> TypeErrCtxt<'_, 'tcx> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue