remove binder from query constraints
This commit is contained in:
parent
dffea43fc1
commit
a04f31dc34
@ -83,16 +83,8 @@ pub(super) fn convert_all(&mut self, query_constraints: &QueryRegionConstraints<
|
||||
}
|
||||
self.constraints.member_constraints = tmp;
|
||||
|
||||
for (predicate, constraint_category) in outlives {
|
||||
// At the moment, we never generate any "higher-ranked"
|
||||
// region constraints like `for<'a> 'a: 'b`. At some point
|
||||
// when we move to universes, we will, and this assertion
|
||||
// will start to fail.
|
||||
let predicate = predicate.no_bound_vars().unwrap_or_else(|| {
|
||||
bug!("query_constraint {:?} contained bound vars", predicate,);
|
||||
});
|
||||
|
||||
self.convert(predicate, *constraint_category);
|
||||
for &(predicate, constraint_category) in outlives {
|
||||
self.convert(predicate, constraint_category);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -268,14 +268,12 @@ pub fn instantiate_nll_query_response_and_region_obligations<R>(
|
||||
(GenericArgKind::Lifetime(v_o), GenericArgKind::Lifetime(v_r)) => {
|
||||
// To make `v_o = v_r`, we emit `v_o: v_r` and `v_r: v_o`.
|
||||
if v_o != v_r {
|
||||
output_query_region_constraints.outlives.push((
|
||||
ty::Binder::dummy(ty::OutlivesPredicate(v_o.into(), v_r)),
|
||||
constraint_category,
|
||||
));
|
||||
output_query_region_constraints.outlives.push((
|
||||
ty::Binder::dummy(ty::OutlivesPredicate(v_r.into(), v_o)),
|
||||
constraint_category,
|
||||
));
|
||||
output_query_region_constraints
|
||||
.outlives
|
||||
.push((ty::OutlivesPredicate(v_o.into(), v_r), constraint_category));
|
||||
output_query_region_constraints
|
||||
.outlives
|
||||
.push((ty::OutlivesPredicate(v_r.into(), v_o), constraint_category));
|
||||
}
|
||||
}
|
||||
|
||||
@ -318,10 +316,8 @@ pub fn instantiate_nll_query_response_and_region_obligations<R>(
|
||||
query_response.value.region_constraints.outlives.iter().filter_map(|&r_c| {
|
||||
let r_c = substitute_value(self.tcx, &result_subst, r_c);
|
||||
|
||||
// Screen out `'a: 'a` cases -- we skip the binder here but
|
||||
// only compare the inner values to one another, so they are still at
|
||||
// consistent binding levels.
|
||||
let ty::OutlivesPredicate(k1, r2) = r_c.0.skip_binder();
|
||||
// Screen out `'a: 'a` cases.
|
||||
let ty::OutlivesPredicate(k1, r2) = r_c.0;
|
||||
if k1 != r2.into() { Some(r_c) } else { None }
|
||||
}),
|
||||
);
|
||||
@ -559,11 +555,11 @@ fn query_outlives_constraints_into_obligations<'a>(
|
||||
|
||||
pub fn query_outlives_constraint_to_obligation(
|
||||
&self,
|
||||
predicate: QueryOutlivesConstraint<'tcx>,
|
||||
(predicate, _): QueryOutlivesConstraint<'tcx>,
|
||||
cause: ObligationCause<'tcx>,
|
||||
param_env: ty::ParamEnv<'tcx>,
|
||||
) -> Obligation<'tcx, ty::Predicate<'tcx>> {
|
||||
let ty::OutlivesPredicate(k1, r2) = predicate.0.skip_binder();
|
||||
let ty::OutlivesPredicate(k1, r2) = predicate;
|
||||
|
||||
let atom = match k1.unpack() {
|
||||
GenericArgKind::Lifetime(r1) => {
|
||||
@ -578,7 +574,7 @@ pub fn query_outlives_constraint_to_obligation(
|
||||
span_bug!(cause.span, "unexpected const outlives {:?}", predicate);
|
||||
}
|
||||
};
|
||||
let predicate = predicate.0.rebind(atom);
|
||||
let predicate = ty::Binder::dummy(atom);
|
||||
|
||||
Obligation::new(self.tcx, cause, param_env, predicate)
|
||||
}
|
||||
@ -643,8 +639,7 @@ pub fn make_query_region_constraints<'tcx>(
|
||||
let outlives: Vec<_> = constraints
|
||||
.iter()
|
||||
.map(|(k, origin)| {
|
||||
// no bound vars in the code above
|
||||
let constraint = ty::Binder::dummy(match *k {
|
||||
let constraint = match *k {
|
||||
// Swap regions because we are going from sub (<=) to outlives
|
||||
// (>=).
|
||||
Constraint::VarSubVar(v1, v2) => ty::OutlivesPredicate(
|
||||
@ -658,16 +653,12 @@ pub fn make_query_region_constraints<'tcx>(
|
||||
ty::OutlivesPredicate(tcx.mk_region(ty::ReVar(v2)).into(), r1)
|
||||
}
|
||||
Constraint::RegSubReg(r1, r2) => ty::OutlivesPredicate(r2.into(), r1),
|
||||
});
|
||||
};
|
||||
(constraint, origin.to_constraint_category())
|
||||
})
|
||||
.chain(
|
||||
outlives_obligations
|
||||
// no bound vars in the code above
|
||||
.map(|(ty, r, constraint_category)| {
|
||||
(ty::Binder::dummy(ty::OutlivesPredicate(ty.into(), r)), constraint_category)
|
||||
}),
|
||||
)
|
||||
.chain(outlives_obligations.map(|(ty, r, constraint_category)| {
|
||||
(ty::OutlivesPredicate(ty.into(), r), constraint_category)
|
||||
}))
|
||||
.collect();
|
||||
|
||||
QueryRegionConstraints { outlives, member_constraints: member_constraints.clone() }
|
||||
|
@ -324,10 +324,8 @@ pub fn unchecked_rebind<W>(self, value: W) -> Canonical<'tcx, W> {
|
||||
}
|
||||
}
|
||||
|
||||
pub type QueryOutlivesConstraint<'tcx> = (
|
||||
ty::Binder<'tcx, ty::OutlivesPredicate<GenericArg<'tcx>, Region<'tcx>>>,
|
||||
ConstraintCategory<'tcx>,
|
||||
);
|
||||
pub type QueryOutlivesConstraint<'tcx> =
|
||||
(ty::OutlivesPredicate<GenericArg<'tcx>, Region<'tcx>>, ConstraintCategory<'tcx>);
|
||||
|
||||
TrivialTypeTraversalAndLiftImpls! {
|
||||
for <'tcx> {
|
||||
|
Loading…
Reference in New Issue
Block a user