Skip to content

Commit f6f2f83

Browse files
Simplify make_query_region_constraints
1 parent c2c9aad commit f6f2f83

File tree

4 files changed

+15
-23
lines changed

4 files changed

+15
-23
lines changed

compiler/rustc_borrowck/src/type_check/constraint_conversion.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,9 @@ impl<'a, 'tcx> ConstraintConversion<'a, 'tcx> {
159159
}
160160

161161
GenericArgKind::Type(mut t1) => {
162+
// Scraped constraints may have had inference vars.
163+
t1 = self.infcx.resolve_vars_if_possible(t1);
164+
162165
// Normalize the type we receive from a `TypeOutlives` obligation
163166
// in the new trait solver.
164167
if infcx.next_trait_solver() {

compiler/rustc_infer/src/infer/canonical/query_response.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ use std::iter;
1313
use rustc_index::{Idx, IndexVec};
1414
use rustc_middle::arena::ArenaAllocatable;
1515
use rustc_middle::bug;
16-
use rustc_middle::mir::ConstraintCategory;
1716
use rustc_middle::ty::{self, BoundVar, GenericArg, GenericArgKind, Ty, TyCtxt, TypeFoldable};
1817
use tracing::{debug, instrument};
1918

@@ -23,7 +22,9 @@ use crate::infer::canonical::{
2322
QueryRegionConstraints, QueryResponse,
2423
};
2524
use crate::infer::region_constraints::{Constraint, RegionConstraintData};
26-
use crate::infer::{DefineOpaqueTypes, InferCtxt, InferOk, InferResult, SubregionOrigin};
25+
use crate::infer::{
26+
DefineOpaqueTypes, InferCtxt, InferOk, InferResult, SubregionOrigin, TypeOutlivesConstraint,
27+
};
2728
use crate::traits::query::NoSolution;
2829
use crate::traits::{ObligationCause, PredicateObligations, ScrubbedTraitError, TraitEngine};
2930

@@ -117,13 +118,7 @@ impl<'tcx> InferCtxt<'tcx> {
117118
let region_obligations = self.take_registered_region_obligations();
118119
debug!(?region_obligations);
119120
let region_constraints = self.with_region_constraints(|region_constraints| {
120-
make_query_region_constraints(
121-
tcx,
122-
region_obligations
123-
.iter()
124-
.map(|r_o| (r_o.sup_type, r_o.sub_region, r_o.origin.to_constraint_category())),
125-
region_constraints,
126-
)
121+
make_query_region_constraints(tcx, region_obligations, region_constraints)
127122
});
128123
debug!(?region_constraints);
129124

@@ -570,7 +565,7 @@ impl<'tcx> InferCtxt<'tcx> {
570565
/// creates query region constraints.
571566
pub fn make_query_region_constraints<'tcx>(
572567
tcx: TyCtxt<'tcx>,
573-
outlives_obligations: impl Iterator<Item = (Ty<'tcx>, ty::Region<'tcx>, ConstraintCategory<'tcx>)>,
568+
outlives_obligations: Vec<TypeOutlivesConstraint<'tcx>>,
574569
region_constraints: &RegionConstraintData<'tcx>,
575570
) -> QueryRegionConstraints<'tcx> {
576571
let RegionConstraintData { constraints, verifys } = region_constraints;
@@ -599,8 +594,11 @@ pub fn make_query_region_constraints<'tcx>(
599594
};
600595
(constraint, origin.to_constraint_category())
601596
})
602-
.chain(outlives_obligations.map(|(ty, r, constraint_category)| {
603-
(ty::OutlivesPredicate(ty.into(), r), constraint_category)
597+
.chain(outlives_obligations.into_iter().map(|obl| {
598+
(
599+
ty::OutlivesPredicate(obl.sup_type.into(), obl.sub_region),
600+
obl.origin.to_constraint_category(),
601+
)
604602
}))
605603
.collect();
606604

compiler/rustc_trait_selection/src/solve/delegate.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -213,13 +213,7 @@ impl<'tcx> rustc_next_trait_solver::delegate::SolverDelegate for SolverDelegate<
213213
// inside of a `probe` whenever we have multiple choices inside of the solver.
214214
let region_obligations = self.0.inner.borrow().region_obligations().to_owned();
215215
let region_constraints = self.0.with_region_constraints(|region_constraints| {
216-
make_query_region_constraints(
217-
self.tcx,
218-
region_obligations
219-
.iter()
220-
.map(|r_o| (r_o.sup_type, r_o.sub_region, r_o.origin.to_constraint_category())),
221-
region_constraints,
222-
)
216+
make_query_region_constraints(self.tcx, region_obligations, region_constraints)
223217
});
224218

225219
let mut seen = FxHashSet::default();

compiler/rustc_trait_selection/src/traits/query/type_op/custom.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,7 @@ where
103103
let region_constraint_data = infcx.take_and_reset_region_constraints();
104104
let region_constraints = query_response::make_query_region_constraints(
105105
infcx.tcx,
106-
region_obligations
107-
.iter()
108-
.map(|r_o| (r_o.sup_type, r_o.sub_region, r_o.origin.to_constraint_category()))
109-
.map(|(ty, r, cc)| (infcx.resolve_vars_if_possible(ty), r, cc)),
106+
region_obligations,
110107
&region_constraint_data,
111108
);
112109

0 commit comments

Comments
 (0)