summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_infer/src/infer/higher_ranked/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_infer/src/infer/higher_ranked/mod.rs')
-rw-r--r--compiler/rustc_infer/src/infer/higher_ranked/mod.rs33
1 files changed, 19 insertions, 14 deletions
diff --git a/compiler/rustc_infer/src/infer/higher_ranked/mod.rs b/compiler/rustc_infer/src/infer/higher_ranked/mod.rs
index c304cd25c..510b1797d 100644
--- a/compiler/rustc_infer/src/infer/higher_ranked/mod.rs
+++ b/compiler/rustc_infer/src/infer/higher_ranked/mod.rs
@@ -6,7 +6,7 @@ use super::{HigherRankedType, InferCtxt};
use crate::infer::CombinedSnapshot;
use rustc_middle::ty::fold::FnMutDelegate;
use rustc_middle::ty::relate::{Relate, RelateResult, TypeRelation};
-use rustc_middle::ty::{self, Binder, TyCtxt, TypeFoldable};
+use rustc_middle::ty::{self, Binder, Ty, TyCtxt, TypeFoldable};
impl<'a, 'tcx> CombineFields<'a, 'tcx> {
/// Checks whether `for<..> sub <: for<..> sup` holds.
@@ -82,17 +82,20 @@ impl<'tcx> InferCtxt<'tcx> {
let delegate = FnMutDelegate {
regions: &mut |br: ty::BoundRegion| {
- self.tcx
- .mk_re_placeholder(ty::PlaceholderRegion { universe: next_universe, bound: br })
+ ty::Region::new_placeholder(
+ self.tcx,
+ ty::PlaceholderRegion { universe: next_universe, bound: br },
+ )
},
types: &mut |bound_ty: ty::BoundTy| {
- self.tcx.mk_placeholder(ty::PlaceholderType {
- universe: next_universe,
- bound: bound_ty,
- })
+ Ty::new_placeholder(
+ self.tcx,
+ ty::PlaceholderType { universe: next_universe, bound: bound_ty },
+ )
},
consts: &mut |bound_var: ty::BoundVar, ty| {
- self.tcx.mk_const(
+ ty::Const::new_placeholder(
+ self.tcx,
ty::PlaceholderConst { universe: next_universe, bound: bound_var },
ty,
)
@@ -103,13 +106,15 @@ impl<'tcx> InferCtxt<'tcx> {
self.tcx.replace_bound_vars_uncached(binder, delegate)
}
- /// See [RegionConstraintCollector::leak_check][1].
+ /// See [RegionConstraintCollector::leak_check][1]. We only check placeholder
+ /// leaking into `outer_universe`, i.e. placeholders which cannot be named by that
+ /// universe.
///
/// [1]: crate::infer::region_constraints::RegionConstraintCollector::leak_check
pub fn leak_check(
&self,
- overly_polymorphic: bool,
- snapshot: &CombinedSnapshot<'tcx>,
+ outer_universe: ty::UniverseIndex,
+ only_consider_snapshot: Option<&CombinedSnapshot<'tcx>>,
) -> RelateResult<'tcx, ()> {
// If the user gave `-Zno-leak-check`, or we have been
// configured to skip the leak check, then skip the leak check
@@ -117,15 +122,15 @@ impl<'tcx> InferCtxt<'tcx> {
// subtyping errors that it would have caught will now be
// caught later on, during region checking. However, we
// continue to use it for a transition period.
- if self.tcx.sess.opts.unstable_opts.no_leak_check || self.skip_leak_check.get() {
+ if self.tcx.sess.opts.unstable_opts.no_leak_check || self.skip_leak_check {
return Ok(());
}
self.inner.borrow_mut().unwrap_region_constraints().leak_check(
self.tcx,
- overly_polymorphic,
+ outer_universe,
self.universe(),
- snapshot,
+ only_consider_snapshot,
)
}
}