diff options
| author | bors <bors@rust-lang.org> | 2021-08-18 15:54:59 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-08-18 15:54:59 +0000 |
| commit | 3d0774d0dc98084d25d95cc1909a8051ebbd9cb1 (patch) | |
| tree | fc3a58189d33e8a6044f15dcd7705bc3f79be7b6 /compiler/rustc_infer/src/infer/mod.rs | |
| parent | 29d61427ac47dc16c83e1c66b929b1198a3ccc35 (diff) | |
| parent | 8343806ff5d130f2ad8e0bc9814694864dcb5397 (diff) | |
| download | rust-3d0774d0dc98084d25d95cc1909a8051ebbd9cb1.tar.gz rust-3d0774d0dc98084d25d95cc1909a8051ebbd9cb1.zip | |
Auto merge of #86700 - lqd:matthews-nll-hrtb-errors, r=nikomatsakis
Matthew's work on improving NLL's "higher-ranked subtype error"s This PR rebases `@matthewjasper's` [branch](https://github.com/matthewjasper/rust/tree/nll-hrtb-errors) which has great work to fix the obscure higher-ranked subtype errors that are tracked in #57374. These are a blocker to turning full NLLs on, and doing some internal cleanups to remove some of the old region code. The goal is so `@nikomatsakis` can take a look at this early, and I'll then do my best to help do the changes and followup work to land this work, and move closer to turning off the migration mode. I've only updated the branch and made it compile, removed a warning or two. r? `@nikomatsakis` (Here's the [zulip topic to discuss this](https://rust-lang.zulipchat.com/#narrow/stream/122657-t-compiler.2Fwg-nll/topic/.2357374.3A.20improving.20higher-ranked.20subtype.20errors.20via.20.2386700) that Niko wanted)
Diffstat (limited to 'compiler/rustc_infer/src/infer/mod.rs')
| -rw-r--r-- | compiler/rustc_infer/src/infer/mod.rs | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/compiler/rustc_infer/src/infer/mod.rs b/compiler/rustc_infer/src/infer/mod.rs index 10217a5f574..9b9ded5c6ba 100644 --- a/compiler/rustc_infer/src/infer/mod.rs +++ b/compiler/rustc_infer/src/infer/mod.rs @@ -1,4 +1,5 @@ pub use self::freshen::TypeFreshener; +pub use self::lexical_region_resolve::RegionResolutionError; pub use self::LateBoundRegionConversionTime::*; pub use self::RegionVariableOrigin::*; pub use self::SubregionOrigin::*; @@ -1110,7 +1111,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { /// etc) this is the root universe U0. For inference variables or /// placeholders, however, it will return the universe which which /// they are associated. - fn universe_of_region(&self, r: ty::Region<'tcx>) -> ty::UniverseIndex { + pub fn universe_of_region(&self, r: ty::Region<'tcx>) -> ty::UniverseIndex { self.inner.borrow_mut().unwrap_region_constraints().universe(r) } @@ -1288,6 +1289,17 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { op(inner.unwrap_region_constraints().data()) } + pub fn region_var_origin(&self, vid: ty::RegionVid) -> RegionVariableOrigin { + let mut inner = self.inner.borrow_mut(); + let inner = &mut *inner; + inner + .region_constraint_storage + .as_mut() + .expect("regions already resolved") + .with_log(&mut inner.undo_log) + .var_origin(vid) + } + /// Takes ownership of the list of variable regions. This implies /// that all the region constraints have already been taken, and /// hence that `resolve_regions_and_report_errors` can never be @@ -1505,7 +1517,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { self.inner.borrow_mut().projection_cache().clear(); } - fn universe(&self) -> ty::UniverseIndex { + pub fn universe(&self) -> ty::UniverseIndex { self.universe.get() } |
