Fix relations
This commit is contained in:
parent
8d90f442ca
commit
0b5ce54bc2
9 changed files with 25 additions and 25 deletions
|
@ -309,7 +309,7 @@ impl<'me, 'bccx, 'tcx> NllTypeRelating<'me, 'bccx, 'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'bccx, 'tcx> TypeRelation<TyCtxt<'tcx>> for NllTypeRelating<'_, 'bccx, 'tcx> {
|
impl<'bccx, 'tcx> TypeRelation<TyCtxt<'tcx>> for NllTypeRelating<'_, 'bccx, 'tcx> {
|
||||||
fn tcx(&self) -> TyCtxt<'tcx> {
|
fn cx(&self) -> TyCtxt<'tcx> {
|
||||||
self.type_checker.infcx.tcx
|
self.type_checker.infcx.tcx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,7 +370,7 @@ impl<'bccx, 'tcx> TypeRelation<TyCtxt<'tcx>> for NllTypeRelating<'_, 'bccx, 'tcx
|
||||||
// shouldn't ever fail. Instead, it unconditionally emits an
|
// shouldn't ever fail. Instead, it unconditionally emits an
|
||||||
// alias-relate goal.
|
// alias-relate goal.
|
||||||
assert!(!self.type_checker.infcx.next_trait_solver());
|
assert!(!self.type_checker.infcx.next_trait_solver());
|
||||||
self.tcx().dcx().span_delayed_bug(
|
self.cx().dcx().span_delayed_bug(
|
||||||
self.span(),
|
self.span(),
|
||||||
"failure to relate an opaque to itself should result in an error later on",
|
"failure to relate an opaque to itself should result in an error later on",
|
||||||
);
|
);
|
||||||
|
@ -540,7 +540,7 @@ impl<'bccx, 'tcx> PredicateEmittingRelation<InferCtxt<'tcx>> for NllTypeRelating
|
||||||
&mut self,
|
&mut self,
|
||||||
obligations: impl IntoIterator<Item: ty::Upcast<TyCtxt<'tcx>, ty::Predicate<'tcx>>>,
|
obligations: impl IntoIterator<Item: ty::Upcast<TyCtxt<'tcx>, ty::Predicate<'tcx>>>,
|
||||||
) {
|
) {
|
||||||
let tcx = self.tcx();
|
let tcx = self.cx();
|
||||||
let param_env = self.param_env();
|
let param_env = self.param_env();
|
||||||
self.register_goals(
|
self.register_goals(
|
||||||
obligations.into_iter().map(|to_pred| Goal::new(tcx, param_env, to_pred)),
|
obligations.into_iter().map(|to_pred| Goal::new(tcx, param_env, to_pred)),
|
||||||
|
@ -559,7 +559,7 @@ impl<'bccx, 'tcx> PredicateEmittingRelation<InferCtxt<'tcx>> for NllTypeRelating
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|goal| {
|
.map(|goal| {
|
||||||
Obligation::new(
|
Obligation::new(
|
||||||
self.tcx(),
|
self.cx(),
|
||||||
ObligationCause::dummy_with_span(self.span()),
|
ObligationCause::dummy_with_span(self.span()),
|
||||||
goal.param_env,
|
goal.param_env,
|
||||||
goal.predicate,
|
goal.predicate,
|
||||||
|
|
|
@ -1930,7 +1930,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
|
||||||
struct SameTypeModuloInfer<'a, 'tcx>(&'a InferCtxt<'tcx>);
|
struct SameTypeModuloInfer<'a, 'tcx>(&'a InferCtxt<'tcx>);
|
||||||
|
|
||||||
impl<'tcx> TypeRelation<TyCtxt<'tcx>> for SameTypeModuloInfer<'_, 'tcx> {
|
impl<'tcx> TypeRelation<TyCtxt<'tcx>> for SameTypeModuloInfer<'_, 'tcx> {
|
||||||
fn tcx(&self) -> TyCtxt<'tcx> {
|
fn cx(&self) -> TyCtxt<'tcx> {
|
||||||
self.0.tcx
|
self.0.tcx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -137,7 +137,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for MatchAgainstHigherRankedOutlives<'tcx>
|
||||||
"MatchAgainstHigherRankedOutlives"
|
"MatchAgainstHigherRankedOutlives"
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tcx(&self) -> TyCtxt<'tcx> {
|
fn cx(&self) -> TyCtxt<'tcx> {
|
||||||
self.tcx
|
self.tcx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -372,7 +372,7 @@ impl<'tcx> Generalizer<'_, 'tcx> {
|
||||||
|
|
||||||
let is_nested_alias = mem::replace(&mut self.in_alias, true);
|
let is_nested_alias = mem::replace(&mut self.in_alias, true);
|
||||||
let result = match self.relate(alias, alias) {
|
let result = match self.relate(alias, alias) {
|
||||||
Ok(alias) => Ok(alias.to_ty(self.tcx())),
|
Ok(alias) => Ok(alias.to_ty(self.cx())),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
if is_nested_alias {
|
if is_nested_alias {
|
||||||
return Err(e);
|
return Err(e);
|
||||||
|
@ -397,7 +397,7 @@ impl<'tcx> Generalizer<'_, 'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> TypeRelation<TyCtxt<'tcx>> for Generalizer<'_, 'tcx> {
|
impl<'tcx> TypeRelation<TyCtxt<'tcx>> for Generalizer<'_, 'tcx> {
|
||||||
fn tcx(&self) -> TyCtxt<'tcx> {
|
fn cx(&self) -> TyCtxt<'tcx> {
|
||||||
self.infcx.tcx
|
self.infcx.tcx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,7 +417,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for Generalizer<'_, 'tcx> {
|
||||||
// (e.g., #41849).
|
// (e.g., #41849).
|
||||||
relate::relate_args_invariantly(self, a_arg, b_arg)
|
relate::relate_args_invariantly(self, a_arg, b_arg)
|
||||||
} else {
|
} else {
|
||||||
let tcx = self.tcx();
|
let tcx = self.cx();
|
||||||
let opt_variances = tcx.variances_of(item_def_id);
|
let opt_variances = tcx.variances_of(item_def_id);
|
||||||
relate::relate_args_with_variances(
|
relate::relate_args_with_variances(
|
||||||
self,
|
self,
|
||||||
|
@ -525,7 +525,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for Generalizer<'_, 'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
debug!("replacing original vid={:?} with new={:?}", vid, new_var_id);
|
debug!("replacing original vid={:?} with new={:?}", vid, new_var_id);
|
||||||
Ok(Ty::new_var(self.tcx(), new_var_id))
|
Ok(Ty::new_var(self.cx(), new_var_id))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -654,7 +654,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for Generalizer<'_, 'tcx> {
|
||||||
{
|
{
|
||||||
variable_table.union(vid, new_var_id);
|
variable_table.union(vid, new_var_id);
|
||||||
}
|
}
|
||||||
Ok(ty::Const::new_var(self.tcx(), new_var_id))
|
Ok(ty::Const::new_var(self.cx(), new_var_id))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -672,7 +672,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for Generalizer<'_, 'tcx> {
|
||||||
args,
|
args,
|
||||||
args,
|
args,
|
||||||
)?;
|
)?;
|
||||||
Ok(ty::Const::new_unevaluated(self.tcx(), ty::UnevaluatedConst { def, args }))
|
Ok(ty::Const::new_unevaluated(self.cx(), ty::UnevaluatedConst { def, args }))
|
||||||
}
|
}
|
||||||
ty::ConstKind::Placeholder(placeholder) => {
|
ty::ConstKind::Placeholder(placeholder) => {
|
||||||
if self.for_universe.can_name(placeholder.universe) {
|
if self.for_universe.can_name(placeholder.universe) {
|
||||||
|
|
|
@ -27,7 +27,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for Glb<'_, '_, 'tcx> {
|
||||||
"Glb"
|
"Glb"
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tcx(&self) -> TyCtxt<'tcx> {
|
fn cx(&self) -> TyCtxt<'tcx> {
|
||||||
self.fields.tcx()
|
self.fields.tcx()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for Glb<'_, '_, 'tcx> {
|
||||||
let origin = SubregionOrigin::Subtype(Box::new(self.fields.trace.clone()));
|
let origin = SubregionOrigin::Subtype(Box::new(self.fields.trace.clone()));
|
||||||
// GLB(&'static u8, &'a u8) == &RegionLUB('static, 'a) u8 == &'static u8
|
// GLB(&'static u8, &'a u8) == &RegionLUB('static, 'a) u8 == &'static u8
|
||||||
Ok(self.fields.infcx.inner.borrow_mut().unwrap_region_constraints().lub_regions(
|
Ok(self.fields.infcx.inner.borrow_mut().unwrap_region_constraints().lub_regions(
|
||||||
self.tcx(),
|
self.cx(),
|
||||||
origin,
|
origin,
|
||||||
a,
|
a,
|
||||||
b,
|
b,
|
||||||
|
|
|
@ -27,7 +27,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for Lub<'_, '_, 'tcx> {
|
||||||
"Lub"
|
"Lub"
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tcx(&self) -> TyCtxt<'tcx> {
|
fn cx(&self) -> TyCtxt<'tcx> {
|
||||||
self.fields.tcx()
|
self.fields.tcx()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for Lub<'_, '_, 'tcx> {
|
||||||
let origin = SubregionOrigin::Subtype(Box::new(self.fields.trace.clone()));
|
let origin = SubregionOrigin::Subtype(Box::new(self.fields.trace.clone()));
|
||||||
// LUB(&'static u8, &'a u8) == &RegionGLB('static, 'a) u8 == &'a u8
|
// LUB(&'static u8, &'a u8) == &RegionGLB('static, 'a) u8 == &'a u8
|
||||||
Ok(self.fields.infcx.inner.borrow_mut().unwrap_region_constraints().glb_regions(
|
Ok(self.fields.infcx.inner.borrow_mut().unwrap_region_constraints().glb_regions(
|
||||||
self.tcx(),
|
self.cx(),
|
||||||
origin,
|
origin,
|
||||||
a,
|
a,
|
||||||
b,
|
b,
|
||||||
|
|
|
@ -32,7 +32,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for TypeRelating<'_, '_, 'tcx> {
|
||||||
"TypeRelating"
|
"TypeRelating"
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tcx(&self) -> TyCtxt<'tcx> {
|
fn cx(&self) -> TyCtxt<'tcx> {
|
||||||
self.fields.infcx.tcx
|
self.fields.infcx.tcx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for TypeRelating<'_, '_, 'tcx> {
|
||||||
// (e.g., #41849).
|
// (e.g., #41849).
|
||||||
relate_args_invariantly(self, a_arg, b_arg)
|
relate_args_invariantly(self, a_arg, b_arg)
|
||||||
} else {
|
} else {
|
||||||
let tcx = self.tcx();
|
let tcx = self.cx();
|
||||||
let opt_variances = tcx.variances_of(item_def_id);
|
let opt_variances = tcx.variances_of(item_def_id);
|
||||||
relate_args_with_variances(self, item_def_id, opt_variances, a_arg, b_arg, false)
|
relate_args_with_variances(self, item_def_id, opt_variances, a_arg, b_arg, false)
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for TypeRelating<'_, '_, 'tcx> {
|
||||||
// can't make progress on `A <: B` if both A and B are
|
// can't make progress on `A <: B` if both A and B are
|
||||||
// type variables, so record an obligation.
|
// type variables, so record an obligation.
|
||||||
self.fields.goals.push(Goal::new(
|
self.fields.goals.push(Goal::new(
|
||||||
self.tcx(),
|
self.cx(),
|
||||||
self.fields.param_env,
|
self.fields.param_env,
|
||||||
ty::Binder::dummy(ty::PredicateKind::Subtype(ty::SubtypePredicate {
|
ty::Binder::dummy(ty::PredicateKind::Subtype(ty::SubtypePredicate {
|
||||||
a_is_expected: true,
|
a_is_expected: true,
|
||||||
|
@ -101,7 +101,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for TypeRelating<'_, '_, 'tcx> {
|
||||||
// can't make progress on `B <: A` if both A and B are
|
// can't make progress on `B <: A` if both A and B are
|
||||||
// type variables, so record an obligation.
|
// type variables, so record an obligation.
|
||||||
self.fields.goals.push(Goal::new(
|
self.fields.goals.push(Goal::new(
|
||||||
self.tcx(),
|
self.cx(),
|
||||||
self.fields.param_env,
|
self.fields.param_env,
|
||||||
ty::Binder::dummy(ty::PredicateKind::Subtype(ty::SubtypePredicate {
|
ty::Binder::dummy(ty::PredicateKind::Subtype(ty::SubtypePredicate {
|
||||||
a_is_expected: false,
|
a_is_expected: false,
|
||||||
|
@ -134,7 +134,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for TypeRelating<'_, '_, 'tcx> {
|
||||||
|
|
||||||
(&ty::Error(e), _) | (_, &ty::Error(e)) => {
|
(&ty::Error(e), _) | (_, &ty::Error(e)) => {
|
||||||
infcx.set_tainted_by_errors(e);
|
infcx.set_tainted_by_errors(e);
|
||||||
return Ok(Ty::new_error(self.tcx(), e));
|
return Ok(Ty::new_error(self.cx(), e));
|
||||||
}
|
}
|
||||||
|
|
||||||
(
|
(
|
||||||
|
|
|
@ -69,7 +69,7 @@ impl<'tcx> Relate<TyCtxt<'tcx>> for ty::Pattern<'tcx> {
|
||||||
if inc_a != inc_b {
|
if inc_a != inc_b {
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
Ok(relation.tcx().mk_pat(ty::PatternKind::Range { start, end, include_end: inc_a }))
|
Ok(relation.cx().mk_pat(ty::PatternKind::Range { start, end, include_end: inc_a }))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ impl<'tcx> Relate<TyCtxt<'tcx>> for &'tcx ty::List<ty::PolyExistentialPredicate<
|
||||||
a: Self,
|
a: Self,
|
||||||
b: Self,
|
b: Self,
|
||||||
) -> RelateResult<'tcx, Self> {
|
) -> RelateResult<'tcx, Self> {
|
||||||
let tcx = relation.tcx();
|
let tcx = relation.cx();
|
||||||
|
|
||||||
// FIXME: this is wasteful, but want to do a perf run to see how slow it is.
|
// FIXME: this is wasteful, but want to do a perf run to see how slow it is.
|
||||||
// We need to perform this deduplication as we sometimes generate duplicate projections
|
// We need to perform this deduplication as we sometimes generate duplicate projections
|
||||||
|
|
|
@ -36,7 +36,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for MatchAgainstFreshVars<'tcx> {
|
||||||
"MatchAgainstFreshVars"
|
"MatchAgainstFreshVars"
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tcx(&self) -> TyCtxt<'tcx> {
|
fn cx(&self) -> TyCtxt<'tcx> {
|
||||||
self.tcx
|
self.tcx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for MatchAgainstFreshVars<'tcx> {
|
||||||
Err(TypeError::Sorts(ExpectedFound::new(true, a, b)))
|
Err(TypeError::Sorts(ExpectedFound::new(true, a, b)))
|
||||||
}
|
}
|
||||||
|
|
||||||
(&ty::Error(guar), _) | (_, &ty::Error(guar)) => Ok(Ty::new_error(self.tcx(), guar)),
|
(&ty::Error(guar), _) | (_, &ty::Error(guar)) => Ok(Ty::new_error(self.cx(), guar)),
|
||||||
|
|
||||||
_ => structurally_relate_tys(self, a, b),
|
_ => structurally_relate_tys(self, a, b),
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue