Skip to content

Commit 9fe7750

Browse files
committed
uplift fold_regions to rustc_type_ir
1 parent f005c74 commit 9fe7750

File tree

24 files changed

+129
-115
lines changed

24 files changed

+129
-115
lines changed

compiler/rustc_borrowck/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ use rustc_infer::infer::{
3434
use rustc_middle::mir::tcx::PlaceTy;
3535
use rustc_middle::mir::*;
3636
use rustc_middle::query::Providers;
37+
use rustc_middle::ty::fold::fold_regions;
3738
use rustc_middle::ty::{self, ParamEnv, RegionVid, TyCtxt, TypingMode};
3839
use rustc_middle::{bug, span_bug};
3940
use rustc_mir_dataflow::impls::{
@@ -502,7 +503,7 @@ impl<'tcx> BorrowckInferCtxt<'tcx> {
502503
for data in tcx.typeck(def_id).concrete_opaque_types.iter().map(|(k, v)| (*k, *v)) {
503504
// HIR typeck did not infer the regions of the opaque, so we instantiate
504505
// them with fresh inference variables.
505-
let (key, hidden_ty) = tcx.fold_regions(data, |_, _| {
506+
let (key, hidden_ty) = fold_regions(tcx, data, |_, _| {
506507
self.next_nll_region_var_in_universe(
507508
NllRegionVariableOrigin::Existential { from_forall: false },
508509
ty::UniverseIndex::ROOT,

compiler/rustc_borrowck/src/region_infer/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use rustc_middle::mir::{
1818
TerminatorKind,
1919
};
2020
use rustc_middle::traits::{ObligationCause, ObligationCauseCode};
21+
use rustc_middle::ty::fold::fold_regions;
2122
use rustc_middle::ty::{self, RegionVid, Ty, TyCtxt, TypeFoldable, UniverseIndex};
2223
use rustc_mir_dataflow::points::DenseLocationMap;
2324
use rustc_span::Span;
@@ -1100,7 +1101,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
11001101
let ty = ty.fold_with(&mut OpaqueFolder { tcx });
11011102
let mut failed = false;
11021103

1103-
let ty = tcx.fold_regions(ty, |r, _depth| {
1104+
let ty = fold_regions(tcx, ty, |r, _depth| {
11041105
let r_vid = self.to_region_vid(r);
11051106
let r_scc = self.constraint_sccs.scc(r_vid);
11061107

@@ -1273,7 +1274,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
12731274
where
12741275
T: TypeFoldable<TyCtxt<'tcx>>,
12751276
{
1276-
tcx.fold_regions(value, |r, _db| {
1277+
fold_regions(tcx, value, |r, _db| {
12771278
let vid = self.to_region_vid(r);
12781279
let scc = self.constraint_sccs.scc(vid);
12791280
let repr = self.scc_representative(scc);

compiler/rustc_borrowck/src/region_infer/opaque_types.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use rustc_errors::ErrorGuaranteed;
33
use rustc_hir::def_id::LocalDefId;
44
use rustc_infer::infer::{InferCtxt, NllRegionVariableOrigin, TyCtxtInferExt as _};
55
use rustc_macros::extension;
6+
use rustc_middle::ty::fold::fold_regions;
67
use rustc_middle::ty::visit::TypeVisitableExt;
78
use rustc_middle::ty::{
89
self, GenericArgKind, GenericArgs, OpaqueHiddenType, OpaqueTypeKey, Ty, TyCtxt, TypeFoldable,
@@ -117,7 +118,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
117118
});
118119
debug!(?opaque_type_key, ?arg_regions);
119120

120-
let concrete_type = infcx.tcx.fold_regions(concrete_type, |region, _| {
121+
let concrete_type = fold_regions(infcx.tcx, concrete_type, |region, _| {
121122
arg_regions
122123
.iter()
123124
.find(|&&(arg_vid, _)| self.eval_equal(region.as_var(), arg_vid))
@@ -204,7 +205,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
204205
where
205206
T: TypeFoldable<TyCtxt<'tcx>>,
206207
{
207-
tcx.fold_regions(ty, |region, _| match *region {
208+
fold_regions(tcx, ty, |region, _| match *region {
208209
ty::ReVar(vid) => {
209210
let scc = self.constraint_sccs.scc(vid);
210211

@@ -442,7 +443,7 @@ impl<'tcx> LazyOpaqueTyEnv<'tcx> {
442443
let outlives_env = OutlivesEnvironment::with_bounds(param_env, implied_bounds);
443444

444445
let mut seen = vec![tcx.lifetimes.re_static];
445-
let canonical_args = tcx.fold_regions(args, |r1, _| {
446+
let canonical_args = fold_regions(tcx, args, |r1, _| {
446447
if r1.is_error() {
447448
r1
448449
} else if let Some(&r2) = seen.iter().find(|&&r2| {

compiler/rustc_borrowck/src/renumber.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use rustc_index::IndexSlice;
22
use rustc_infer::infer::NllRegionVariableOrigin;
33
use rustc_middle::mir::visit::{MutVisitor, TyContext};
44
use rustc_middle::mir::{Body, ConstOperand, Location, Promoted};
5+
use rustc_middle::ty::fold::fold_regions;
56
use rustc_middle::ty::{self, GenericArgsRef, Ty, TyCtxt, TypeFoldable};
67
use rustc_span::Symbol;
78
use tracing::{debug, instrument};
@@ -68,7 +69,7 @@ impl<'a, 'tcx> RegionRenumberer<'a, 'tcx> {
6869
F: Fn() -> RegionCtxt,
6970
{
7071
let origin = NllRegionVariableOrigin::Existential { from_forall: false };
71-
self.infcx.tcx.fold_regions(value, |_region, _depth| {
72+
fold_regions(self.infcx.tcx, value, |_region, _depth| {
7273
self.infcx.next_nll_region_var(origin, || region_ctxt_fn())
7374
})
7475
}

compiler/rustc_borrowck/src/type_check/constraint_conversion.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use rustc_middle::bug;
88
use rustc_middle::mir::{ClosureOutlivesSubject, ClosureRegionRequirements, ConstraintCategory};
99
use rustc_middle::traits::ObligationCause;
1010
use rustc_middle::traits::query::NoSolution;
11+
use rustc_middle::ty::fold::fold_regions;
1112
use rustc_middle::ty::{self, GenericArgKind, Ty, TyCtxt, TypeFoldable, TypeVisitableExt};
1213
use rustc_span::Span;
1314
use rustc_trait_selection::traits::ScrubbedTraitError;
@@ -216,7 +217,7 @@ impl<'a, 'tcx> ConstraintConversion<'a, 'tcx> {
216217
/// are dealt with during trait solving.
217218
fn replace_placeholders_with_nll<T: TypeFoldable<TyCtxt<'tcx>>>(&mut self, value: T) -> T {
218219
if value.has_placeholders() {
219-
self.tcx.fold_regions(value, |r, _| match *r {
220+
fold_regions(self.tcx, value, |r, _| match *r {
220221
ty::RePlaceholder(placeholder) => {
221222
self.constraints.placeholder_region(self.infcx, placeholder)
222223
}

compiler/rustc_borrowck/src/type_check/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use rustc_middle::mir::*;
2626
use rustc_middle::traits::query::NoSolution;
2727
use rustc_middle::ty::adjustment::PointerCoercion;
2828
use rustc_middle::ty::cast::CastTy;
29+
use rustc_middle::ty::fold::fold_regions;
2930
use rustc_middle::ty::visit::TypeVisitableExt;
3031
use rustc_middle::ty::{
3132
self, Binder, CanonicalUserTypeAnnotation, CanonicalUserTypeAnnotations, CoroutineArgsExt,
@@ -213,7 +214,7 @@ pub(crate) fn type_check<'a, 'tcx>(
213214

214215
// Convert all regions to nll vars.
215216
let (opaque_type_key, hidden_type) =
216-
infcx.tcx.fold_regions((opaque_type_key, hidden_type), |region, _| {
217+
fold_regions(infcx.tcx, (opaque_type_key, hidden_type), |region, _| {
217218
match region.kind() {
218219
ty::ReVar(_) => region,
219220
ty::RePlaceholder(placeholder) => {
@@ -2073,7 +2074,7 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
20732074
);
20742075

20752076
let is_implicit_coercion = coercion_source == CoercionSource::Implicit;
2076-
let unsize_to = tcx.fold_regions(ty, |r, _| {
2077+
let unsize_to = fold_regions(tcx, ty, |r, _| {
20772078
if let ty::ReVar(_) = r.kind() { tcx.lifetimes.re_erased } else { r }
20782079
});
20792080
self.prove_trait_ref(

compiler/rustc_borrowck/src/universal_regions.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use rustc_hir::lang_items::LangItem;
2626
use rustc_index::IndexVec;
2727
use rustc_infer::infer::NllRegionVariableOrigin;
2828
use rustc_macros::extension;
29-
use rustc_middle::ty::fold::TypeFoldable;
29+
use rustc_middle::ty::fold::{TypeFoldable, fold_regions};
3030
use rustc_middle::ty::print::with_no_trimmed_paths;
3131
use rustc_middle::ty::{
3232
self, GenericArgs, GenericArgsRef, InlineConstArgs, InlineConstArgsParts, RegionVid, Ty,
@@ -824,7 +824,7 @@ impl<'tcx> BorrowckInferCtxt<'tcx> {
824824
where
825825
T: TypeFoldable<TyCtxt<'tcx>>,
826826
{
827-
self.infcx.tcx.fold_regions(value, |region, _depth| {
827+
fold_regions(self.infcx.tcx, value, |region, _depth| {
828828
let name = region.get_name_or_anon();
829829
debug!(?region, ?name);
830830

@@ -906,7 +906,7 @@ impl<'tcx> UniversalRegionIndices<'tcx> {
906906
where
907907
T: TypeFoldable<TyCtxt<'tcx>>,
908908
{
909-
tcx.fold_regions(value, |region, _| ty::Region::new_var(tcx, self.to_region_vid(region)))
909+
fold_regions(tcx, value, |region, _| ty::Region::new_var(tcx, self.to_region_vid(region)))
910910
}
911911
}
912912

compiler/rustc_hir_analysis/src/check/check.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use rustc_middle::middle::resolve_bound_vars::ResolvedArg;
1717
use rustc_middle::middle::stability::EvalResult;
1818
use rustc_middle::span_bug;
1919
use rustc_middle::ty::error::TypeErrorToStringExt;
20-
use rustc_middle::ty::fold::BottomUpFolder;
20+
use rustc_middle::ty::fold::{BottomUpFolder, fold_regions};
2121
use rustc_middle::ty::layout::{LayoutError, MAX_SIMD_LANES};
2222
use rustc_middle::ty::util::{Discr, InspectCoroutineFields, IntTypeExt};
2323
use rustc_middle::ty::{
@@ -346,7 +346,7 @@ fn check_opaque_meets_bounds<'tcx>(
346346
// FIXME: Consider wrapping the hidden type in an existential `Binder` and instantiating it
347347
// here rather than using ReErased.
348348
let hidden_ty = tcx.type_of(def_id.to_def_id()).instantiate(tcx, args);
349-
let hidden_ty = tcx.fold_regions(hidden_ty, |re, _dbi| match re.kind() {
349+
let hidden_ty = fold_regions(tcx, hidden_ty, |re, _dbi| match re.kind() {
350350
ty::ReErased => infcx.next_region_var(RegionVariableOrigin::MiscVariable(span)),
351351
_ => re,
352352
});

compiler/rustc_hir_analysis/src/collect.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ use rustc_infer::infer::{InferCtxt, TyCtxtInferExt};
3434
use rustc_infer::traits::ObligationCause;
3535
use rustc_middle::hir::nested_filter;
3636
use rustc_middle::query::Providers;
37+
use rustc_middle::ty::fold::fold_regions;
3738
use rustc_middle::ty::util::{Discr, IntTypeExt};
3839
use rustc_middle::ty::{self, AdtKind, Const, IsSuggestable, Ty, TyCtxt, TypingMode};
3940
use rustc_middle::{bug, span_bug};
@@ -1415,7 +1416,7 @@ fn infer_return_ty_for_fn_sig<'tcx>(
14151416
GenericParamKind::Lifetime { .. } => true,
14161417
_ => false,
14171418
});
1418-
let fn_sig = tcx.fold_regions(fn_sig, |r, _| match *r {
1419+
let fn_sig = fold_regions(tcx, fn_sig, |r, _| match *r {
14191420
ty::ReErased => {
14201421
if has_region_params {
14211422
ty::Region::new_error_with_message(

compiler/rustc_hir_analysis/src/collect/type_of.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use rustc_hir as hir;
55
use rustc_hir::HirId;
66
use rustc_hir::def_id::{DefId, LocalDefId};
77
use rustc_middle::query::plumbing::CyclePlaceholder;
8+
use rustc_middle::ty::fold::fold_regions;
89
use rustc_middle::ty::print::with_forced_trimmed_paths;
910
use rustc_middle::ty::util::IntTypeExt;
1011
use rustc_middle::ty::{self, Article, IsSuggestable, Ty, TyCtxt, TypeVisitableExt};
@@ -113,7 +114,7 @@ fn anon_const_type_of<'tcx>(tcx: TyCtxt<'tcx>, def_id: LocalDefId) -> Ty<'tcx> {
113114
// so no need for ConstArg.
114115
Node::Ty(&hir::Ty { kind: TyKind::Typeof(ref e), span, .. }) if e.hir_id == hir_id => {
115116
let ty = tcx.typeck(def_id).node_type(tcx.local_def_id_to_hir_id(def_id));
116-
let ty = tcx.fold_regions(ty, |r, _| {
117+
let ty = fold_regions(tcx, ty, |r, _| {
117118
if r.is_erased() { ty::Region::new_error_misc(tcx) } else { r }
118119
});
119120
let (ty, opt_sugg) = if let Some(ty) = ty.make_suggestable(tcx, false, None) {

0 commit comments

Comments
 (0)