Rename some things
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
use rustc_errors::ErrorGuaranteed;
|
use rustc_errors::ErrorGuaranteed;
|
||||||
use rustc_infer::infer::relate::{ObligationEmittingRelation, StructurallyRelateAliases};
|
use rustc_infer::infer::relate::{PredicateEmittingRelation, StructurallyRelateAliases};
|
||||||
use rustc_infer::infer::relate::{Relate, RelateResult, TypeRelation};
|
use rustc_infer::infer::relate::{Relate, RelateResult, TypeRelation};
|
||||||
use rustc_infer::infer::NllRegionVariableOrigin;
|
use rustc_infer::infer::NllRegionVariableOrigin;
|
||||||
use rustc_infer::traits::solve::Goal;
|
use rustc_infer::traits::solve::Goal;
|
||||||
@@ -155,7 +155,7 @@ impl<'me, 'bccx, 'tcx> NllTypeRelating<'me, 'bccx, 'tcx> {
|
|||||||
),
|
),
|
||||||
};
|
};
|
||||||
let cause = ObligationCause::dummy_with_span(self.span());
|
let cause = ObligationCause::dummy_with_span(self.span());
|
||||||
self.register_obligations(
|
self.register_goals(
|
||||||
infcx
|
infcx
|
||||||
.handle_opaque_type(a, b, &cause, self.param_env())?
|
.handle_opaque_type(a, b, &cause, self.param_env())?
|
||||||
.obligations
|
.obligations
|
||||||
@@ -539,7 +539,7 @@ impl<'bccx, 'tcx> TypeRelation<TyCtxt<'tcx>> for NllTypeRelating<'_, 'bccx, 'tcx
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'bccx, 'tcx> ObligationEmittingRelation<'tcx> for NllTypeRelating<'_, 'bccx, 'tcx> {
|
impl<'bccx, 'tcx> PredicateEmittingRelation<'tcx> for NllTypeRelating<'_, 'bccx, 'tcx> {
|
||||||
fn span(&self) -> Span {
|
fn span(&self) -> Span {
|
||||||
self.locations.span(self.type_checker.body)
|
self.locations.span(self.type_checker.body)
|
||||||
}
|
}
|
||||||
@@ -558,12 +558,12 @@ impl<'bccx, 'tcx> ObligationEmittingRelation<'tcx> for NllTypeRelating<'_, 'bccx
|
|||||||
) {
|
) {
|
||||||
let tcx = self.tcx();
|
let tcx = self.tcx();
|
||||||
let param_env = self.param_env();
|
let param_env = self.param_env();
|
||||||
self.register_obligations(
|
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)),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_obligations(
|
fn register_goals(
|
||||||
&mut self,
|
&mut self,
|
||||||
obligations: impl IntoIterator<Item = Goal<'tcx, ty::Predicate<'tcx>>>,
|
obligations: impl IntoIterator<Item = Goal<'tcx, ty::Predicate<'tcx>>>,
|
||||||
) {
|
) {
|
||||||
@@ -589,7 +589,7 @@ impl<'bccx, 'tcx> ObligationEmittingRelation<'tcx> for NllTypeRelating<'_, 'bccx
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_type_relate_obligation(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) {
|
fn register_alias_relate_predicate(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) {
|
||||||
self.register_predicates([ty::Binder::dummy(match self.ambient_variance {
|
self.register_predicates([ty::Binder::dummy(match self.ambient_variance {
|
||||||
ty::Variance::Covariant => ty::PredicateKind::AliasRelate(
|
ty::Variance::Covariant => ty::PredicateKind::AliasRelate(
|
||||||
a.into(),
|
a.into(),
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ impl<'a, 'tcx> At<'a, 'tcx> {
|
|||||||
Ok(InferOk {
|
Ok(InferOk {
|
||||||
value: (),
|
value: (),
|
||||||
obligations: fields
|
obligations: fields
|
||||||
.obligations
|
.goals
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|goal| {
|
.map(|goal| {
|
||||||
Obligation::new(
|
Obligation::new(
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
pub use at::DefineOpaqueTypes;
|
pub use at::DefineOpaqueTypes;
|
||||||
pub use freshen::TypeFreshener;
|
pub use freshen::TypeFreshener;
|
||||||
pub use lexical_region_resolve::RegionResolutionError;
|
pub use lexical_region_resolve::RegionResolutionError;
|
||||||
|
pub use relate::combine::CombineFields;
|
||||||
|
pub use relate::combine::PredicateEmittingRelation;
|
||||||
|
pub use relate::StructurallyRelateAliases;
|
||||||
pub use rustc_macros::{TypeFoldable, TypeVisitable};
|
pub use rustc_macros::{TypeFoldable, TypeVisitable};
|
||||||
pub use rustc_middle::ty::IntVarValue;
|
pub use rustc_middle::ty::IntVarValue;
|
||||||
pub use BoundRegionConversionTime::*;
|
pub use BoundRegionConversionTime::*;
|
||||||
@@ -8,7 +11,7 @@ pub use RegionVariableOrigin::*;
|
|||||||
pub use SubregionOrigin::*;
|
pub use SubregionOrigin::*;
|
||||||
pub use ValuePairs::*;
|
pub use ValuePairs::*;
|
||||||
|
|
||||||
use crate::infer::relate::{CombineFields, RelateResult};
|
use crate::infer::relate::RelateResult;
|
||||||
use crate::traits::{self, ObligationCause, ObligationInspector, PredicateObligation, TraitEngine};
|
use crate::traits::{self, ObligationCause, ObligationInspector, PredicateObligation, TraitEngine};
|
||||||
use error_reporting::TypeErrCtxt;
|
use error_reporting::TypeErrCtxt;
|
||||||
use free_regions::RegionRelations;
|
use free_regions::RegionRelations;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ pub struct CombineFields<'infcx, 'tcx> {
|
|||||||
pub infcx: &'infcx InferCtxt<'tcx>,
|
pub infcx: &'infcx InferCtxt<'tcx>,
|
||||||
pub trace: TypeTrace<'tcx>,
|
pub trace: TypeTrace<'tcx>,
|
||||||
pub param_env: ty::ParamEnv<'tcx>,
|
pub param_env: ty::ParamEnv<'tcx>,
|
||||||
pub obligations: Vec<Goal<'tcx, ty::Predicate<'tcx>>>,
|
pub goals: Vec<Goal<'tcx, ty::Predicate<'tcx>>>,
|
||||||
pub define_opaque_types: DefineOpaqueTypes,
|
pub define_opaque_types: DefineOpaqueTypes,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,11 +50,11 @@ impl<'infcx, 'tcx> CombineFields<'infcx, 'tcx> {
|
|||||||
param_env: ty::ParamEnv<'tcx>,
|
param_env: ty::ParamEnv<'tcx>,
|
||||||
define_opaque_types: DefineOpaqueTypes,
|
define_opaque_types: DefineOpaqueTypes,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self { infcx, trace, param_env, define_opaque_types, obligations: vec![] }
|
Self { infcx, trace, param_env, define_opaque_types, goals: vec![] }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn into_obligations(self) -> Vec<PredicateObligation<'tcx>> {
|
pub(crate) fn into_obligations(self) -> Vec<PredicateObligation<'tcx>> {
|
||||||
self.obligations
|
self.goals
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|goal| {
|
.map(|goal| {
|
||||||
Obligation::new(
|
Obligation::new(
|
||||||
@@ -76,7 +76,7 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||||||
b: Ty<'tcx>,
|
b: Ty<'tcx>,
|
||||||
) -> RelateResult<'tcx, Ty<'tcx>>
|
) -> RelateResult<'tcx, Ty<'tcx>>
|
||||||
where
|
where
|
||||||
R: ObligationEmittingRelation<'tcx>,
|
R: PredicateEmittingRelation<'tcx>,
|
||||||
{
|
{
|
||||||
debug_assert!(!a.has_escaping_bound_vars());
|
debug_assert!(!a.has_escaping_bound_vars());
|
||||||
debug_assert!(!b.has_escaping_bound_vars());
|
debug_assert!(!b.has_escaping_bound_vars());
|
||||||
@@ -140,7 +140,7 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||||||
relate::structurally_relate_tys(relation, a, b)
|
relate::structurally_relate_tys(relation, a, b)
|
||||||
}
|
}
|
||||||
StructurallyRelateAliases::No => {
|
StructurallyRelateAliases::No => {
|
||||||
relation.register_type_relate_obligation(a, b);
|
relation.register_alias_relate_predicate(a, b);
|
||||||
Ok(a)
|
Ok(a)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -171,7 +171,7 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||||||
b: ty::Const<'tcx>,
|
b: ty::Const<'tcx>,
|
||||||
) -> RelateResult<'tcx, ty::Const<'tcx>>
|
) -> RelateResult<'tcx, ty::Const<'tcx>>
|
||||||
where
|
where
|
||||||
R: ObligationEmittingRelation<'tcx>,
|
R: PredicateEmittingRelation<'tcx>,
|
||||||
{
|
{
|
||||||
debug!("{}.consts({:?}, {:?})", relation.tag(), a, b);
|
debug!("{}.consts({:?}, {:?})", relation.tag(), a, b);
|
||||||
debug_assert!(!a.has_escaping_bound_vars());
|
debug_assert!(!a.has_escaping_bound_vars());
|
||||||
@@ -309,14 +309,14 @@ impl<'infcx, 'tcx> CombineFields<'infcx, 'tcx> {
|
|||||||
&mut self,
|
&mut self,
|
||||||
obligations: impl IntoIterator<Item = Goal<'tcx, ty::Predicate<'tcx>>>,
|
obligations: impl IntoIterator<Item = Goal<'tcx, ty::Predicate<'tcx>>>,
|
||||||
) {
|
) {
|
||||||
self.obligations.extend(obligations);
|
self.goals.extend(obligations);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn register_predicates(
|
pub fn register_predicates(
|
||||||
&mut self,
|
&mut self,
|
||||||
obligations: impl IntoIterator<Item: Upcast<TyCtxt<'tcx>, ty::Predicate<'tcx>>>,
|
obligations: impl IntoIterator<Item: Upcast<TyCtxt<'tcx>, ty::Predicate<'tcx>>>,
|
||||||
) {
|
) {
|
||||||
self.obligations.extend(
|
self.goals.extend(
|
||||||
obligations
|
obligations
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|to_pred| Goal::new(self.infcx.tcx, self.param_env, to_pred)),
|
.map(|to_pred| Goal::new(self.infcx.tcx, self.param_env, to_pred)),
|
||||||
@@ -324,7 +324,7 @@ impl<'infcx, 'tcx> CombineFields<'infcx, 'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait ObligationEmittingRelation<'tcx>: TypeRelation<TyCtxt<'tcx>> {
|
pub trait PredicateEmittingRelation<'tcx>: TypeRelation<TyCtxt<'tcx>> {
|
||||||
fn span(&self) -> Span;
|
fn span(&self) -> Span;
|
||||||
|
|
||||||
fn param_env(&self) -> ty::ParamEnv<'tcx>;
|
fn param_env(&self) -> ty::ParamEnv<'tcx>;
|
||||||
@@ -335,19 +335,18 @@ pub trait ObligationEmittingRelation<'tcx>: TypeRelation<TyCtxt<'tcx>> {
|
|||||||
fn structurally_relate_aliases(&self) -> StructurallyRelateAliases;
|
fn structurally_relate_aliases(&self) -> StructurallyRelateAliases;
|
||||||
|
|
||||||
/// Register obligations that must hold in order for this relation to hold
|
/// Register obligations that must hold in order for this relation to hold
|
||||||
fn register_obligations(
|
fn register_goals(
|
||||||
&mut self,
|
&mut self,
|
||||||
obligations: impl IntoIterator<Item = Goal<'tcx, ty::Predicate<'tcx>>>,
|
obligations: impl IntoIterator<Item = Goal<'tcx, ty::Predicate<'tcx>>>,
|
||||||
);
|
);
|
||||||
|
|
||||||
/// Register predicates that must hold in order for this relation to hold. Uses
|
/// Register predicates that must hold in order for this relation to hold.
|
||||||
/// a default obligation cause, [`ObligationEmittingRelation::register_obligations`] should
|
/// This uses the default `param_env` of the obligation.
|
||||||
/// be used if control over the obligation causes is required.
|
|
||||||
fn register_predicates(
|
fn register_predicates(
|
||||||
&mut self,
|
&mut self,
|
||||||
obligations: impl IntoIterator<Item: Upcast<TyCtxt<'tcx>, ty::Predicate<'tcx>>>,
|
obligations: impl IntoIterator<Item: Upcast<TyCtxt<'tcx>, ty::Predicate<'tcx>>>,
|
||||||
);
|
);
|
||||||
|
|
||||||
/// Register `AliasRelate` obligation(s) that both types must be related to each other.
|
/// Register `AliasRelate` obligation(s) that both types must be related to each other.
|
||||||
fn register_type_relate_obligation(&mut self, a: Ty<'tcx>, b: Ty<'tcx>);
|
fn register_alias_relate_predicate(&mut self, a: Ty<'tcx>, b: Ty<'tcx>);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use std::mem;
|
use std::mem;
|
||||||
|
|
||||||
use super::StructurallyRelateAliases;
|
use super::StructurallyRelateAliases;
|
||||||
use super::{ObligationEmittingRelation, Relate, RelateResult, TypeRelation};
|
use super::{PredicateEmittingRelation, Relate, RelateResult, TypeRelation};
|
||||||
use crate::infer::relate;
|
use crate::infer::relate;
|
||||||
use crate::infer::type_variable::TypeVariableValue;
|
use crate::infer::type_variable::TypeVariableValue;
|
||||||
use crate::infer::{InferCtxt, RegionVariableOrigin};
|
use crate::infer::{InferCtxt, RegionVariableOrigin};
|
||||||
@@ -30,7 +30,7 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||||||
/// `TypeRelation`. Do not use this, and instead please use `At::eq`, for all
|
/// `TypeRelation`. Do not use this, and instead please use `At::eq`, for all
|
||||||
/// other usecases (i.e. setting the value of a type var).
|
/// other usecases (i.e. setting the value of a type var).
|
||||||
#[instrument(level = "debug", skip(self, relation))]
|
#[instrument(level = "debug", skip(self, relation))]
|
||||||
pub fn instantiate_ty_var<R: ObligationEmittingRelation<'tcx>>(
|
pub fn instantiate_ty_var<R: PredicateEmittingRelation<'tcx>>(
|
||||||
&self,
|
&self,
|
||||||
relation: &mut R,
|
relation: &mut R,
|
||||||
target_is_expected: bool,
|
target_is_expected: bool,
|
||||||
@@ -178,7 +178,7 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||||||
///
|
///
|
||||||
/// See `tests/ui/const-generics/occurs-check/` for more examples where this is relevant.
|
/// See `tests/ui/const-generics/occurs-check/` for more examples where this is relevant.
|
||||||
#[instrument(level = "debug", skip(self, relation))]
|
#[instrument(level = "debug", skip(self, relation))]
|
||||||
pub(super) fn instantiate_const_var<R: ObligationEmittingRelation<'tcx>>(
|
pub(super) fn instantiate_const_var<R: PredicateEmittingRelation<'tcx>>(
|
||||||
&self,
|
&self,
|
||||||
relation: &mut R,
|
relation: &mut R,
|
||||||
target_is_expected: bool,
|
target_is_expected: bool,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ use rustc_middle::ty::relate::{Relate, RelateResult, TypeRelation};
|
|||||||
use rustc_middle::ty::{self, Ty, TyCtxt, TypeVisitableExt};
|
use rustc_middle::ty::{self, Ty, TyCtxt, TypeVisitableExt};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
|
|
||||||
use super::combine::{CombineFields, ObligationEmittingRelation};
|
use super::combine::{CombineFields, PredicateEmittingRelation};
|
||||||
use super::lattice::{self, LatticeDir};
|
use super::lattice::{self, LatticeDir};
|
||||||
use super::StructurallyRelateAliases;
|
use super::StructurallyRelateAliases;
|
||||||
use crate::infer::{DefineOpaqueTypes, InferCtxt, SubregionOrigin};
|
use crate::infer::{DefineOpaqueTypes, InferCtxt, SubregionOrigin};
|
||||||
@@ -128,7 +128,7 @@ impl<'combine, 'infcx, 'tcx> LatticeDir<'infcx, 'tcx> for Glb<'combine, 'infcx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> ObligationEmittingRelation<'tcx> for Glb<'_, '_, 'tcx> {
|
impl<'tcx> PredicateEmittingRelation<'tcx> for Glb<'_, '_, 'tcx> {
|
||||||
fn span(&self) -> Span {
|
fn span(&self) -> Span {
|
||||||
self.fields.trace.span()
|
self.fields.trace.span()
|
||||||
}
|
}
|
||||||
@@ -148,14 +148,14 @@ impl<'tcx> ObligationEmittingRelation<'tcx> for Glb<'_, '_, 'tcx> {
|
|||||||
self.fields.register_predicates(obligations);
|
self.fields.register_predicates(obligations);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_obligations(
|
fn register_goals(
|
||||||
&mut self,
|
&mut self,
|
||||||
obligations: impl IntoIterator<Item = Goal<'tcx, ty::Predicate<'tcx>>>,
|
obligations: impl IntoIterator<Item = Goal<'tcx, ty::Predicate<'tcx>>>,
|
||||||
) {
|
) {
|
||||||
self.fields.register_obligations(obligations);
|
self.fields.register_obligations(obligations);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_type_relate_obligation(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) {
|
fn register_alias_relate_predicate(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) {
|
||||||
self.register_predicates([ty::Binder::dummy(ty::PredicateKind::AliasRelate(
|
self.register_predicates([ty::Binder::dummy(ty::PredicateKind::AliasRelate(
|
||||||
a.into(),
|
a.into(),
|
||||||
b.into(),
|
b.into(),
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
//!
|
//!
|
||||||
//! [lattices]: https://en.wikipedia.org/wiki/Lattice_(order)
|
//! [lattices]: https://en.wikipedia.org/wiki/Lattice_(order)
|
||||||
|
|
||||||
use super::combine::ObligationEmittingRelation;
|
use super::combine::PredicateEmittingRelation;
|
||||||
use crate::infer::{DefineOpaqueTypes, InferCtxt};
|
use crate::infer::{DefineOpaqueTypes, InferCtxt};
|
||||||
use crate::traits::ObligationCause;
|
use crate::traits::ObligationCause;
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ use rustc_middle::ty::{self, Ty};
|
|||||||
///
|
///
|
||||||
/// GLB moves "down" the lattice (to smaller values); LUB moves
|
/// GLB moves "down" the lattice (to smaller values); LUB moves
|
||||||
/// "up" the lattice (to bigger values).
|
/// "up" the lattice (to bigger values).
|
||||||
pub trait LatticeDir<'f, 'tcx>: ObligationEmittingRelation<'tcx> {
|
pub trait LatticeDir<'f, 'tcx>: PredicateEmittingRelation<'tcx> {
|
||||||
fn infcx(&self) -> &'f InferCtxt<'tcx>;
|
fn infcx(&self) -> &'f InferCtxt<'tcx>;
|
||||||
|
|
||||||
fn cause(&self) -> &ObligationCause<'tcx>;
|
fn cause(&self) -> &ObligationCause<'tcx>;
|
||||||
@@ -109,7 +109,7 @@ where
|
|||||||
&& def_id.is_local()
|
&& def_id.is_local()
|
||||||
&& !this.infcx().next_trait_solver() =>
|
&& !this.infcx().next_trait_solver() =>
|
||||||
{
|
{
|
||||||
this.register_obligations(
|
this.register_goals(
|
||||||
infcx
|
infcx
|
||||||
.handle_opaque_type(a, b, this.cause(), this.param_env())?
|
.handle_opaque_type(a, b, this.cause(), this.param_env())?
|
||||||
.obligations
|
.obligations
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
//! Least upper bound. See [`lattice`].
|
//! Least upper bound. See [`lattice`].
|
||||||
|
|
||||||
use super::combine::{CombineFields, ObligationEmittingRelation};
|
use super::combine::{CombineFields, PredicateEmittingRelation};
|
||||||
use super::lattice::{self, LatticeDir};
|
use super::lattice::{self, LatticeDir};
|
||||||
use super::StructurallyRelateAliases;
|
use super::StructurallyRelateAliases;
|
||||||
use crate::infer::{DefineOpaqueTypes, InferCtxt, SubregionOrigin};
|
use crate::infer::{DefineOpaqueTypes, InferCtxt, SubregionOrigin};
|
||||||
@@ -128,7 +128,7 @@ impl<'combine, 'infcx, 'tcx> LatticeDir<'infcx, 'tcx> for Lub<'combine, 'infcx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> ObligationEmittingRelation<'tcx> for Lub<'_, '_, 'tcx> {
|
impl<'tcx> PredicateEmittingRelation<'tcx> for Lub<'_, '_, 'tcx> {
|
||||||
fn span(&self) -> Span {
|
fn span(&self) -> Span {
|
||||||
self.fields.trace.span()
|
self.fields.trace.span()
|
||||||
}
|
}
|
||||||
@@ -148,14 +148,14 @@ impl<'tcx> ObligationEmittingRelation<'tcx> for Lub<'_, '_, 'tcx> {
|
|||||||
self.fields.register_predicates(obligations);
|
self.fields.register_predicates(obligations);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_obligations(
|
fn register_goals(
|
||||||
&mut self,
|
&mut self,
|
||||||
obligations: impl IntoIterator<Item = Goal<'tcx, ty::Predicate<'tcx>>>,
|
obligations: impl IntoIterator<Item = Goal<'tcx, ty::Predicate<'tcx>>>,
|
||||||
) {
|
) {
|
||||||
self.fields.register_obligations(obligations)
|
self.fields.register_obligations(obligations)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_type_relate_obligation(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) {
|
fn register_alias_relate_predicate(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) {
|
||||||
self.register_predicates([ty::Binder::dummy(ty::PredicateKind::AliasRelate(
|
self.register_predicates([ty::Binder::dummy(ty::PredicateKind::AliasRelate(
|
||||||
a.into(),
|
a.into(),
|
||||||
b.into(),
|
b.into(),
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ pub use rustc_middle::ty::relate::*;
|
|||||||
|
|
||||||
pub use self::_match::MatchAgainstFreshVars;
|
pub use self::_match::MatchAgainstFreshVars;
|
||||||
pub use self::combine::CombineFields;
|
pub use self::combine::CombineFields;
|
||||||
pub use self::combine::ObligationEmittingRelation;
|
pub use self::combine::PredicateEmittingRelation;
|
||||||
|
|
||||||
pub mod _match;
|
pub mod _match;
|
||||||
pub(super) mod combine;
|
pub(super) mod combine;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use super::combine::CombineFields;
|
use super::combine::CombineFields;
|
||||||
use crate::infer::relate::{ObligationEmittingRelation, StructurallyRelateAliases};
|
use crate::infer::relate::{PredicateEmittingRelation, StructurallyRelateAliases};
|
||||||
use crate::infer::BoundRegionConversionTime::HigherRankedType;
|
use crate::infer::BoundRegionConversionTime::HigherRankedType;
|
||||||
use crate::infer::{DefineOpaqueTypes, SubregionOrigin};
|
use crate::infer::{DefineOpaqueTypes, SubregionOrigin};
|
||||||
use rustc_middle::traits::solve::Goal;
|
use rustc_middle::traits::solve::Goal;
|
||||||
@@ -87,7 +87,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for TypeRelating<'_, '_, 'tcx> {
|
|||||||
ty::Covariant => {
|
ty::Covariant => {
|
||||||
// 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.obligations.push(Goal::new(
|
self.fields.goals.push(Goal::new(
|
||||||
self.tcx(),
|
self.tcx(),
|
||||||
self.fields.param_env,
|
self.fields.param_env,
|
||||||
ty::Binder::dummy(ty::PredicateKind::Subtype(ty::SubtypePredicate {
|
ty::Binder::dummy(ty::PredicateKind::Subtype(ty::SubtypePredicate {
|
||||||
@@ -100,7 +100,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for TypeRelating<'_, '_, 'tcx> {
|
|||||||
ty::Contravariant => {
|
ty::Contravariant => {
|
||||||
// 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.obligations.push(Goal::new(
|
self.fields.goals.push(Goal::new(
|
||||||
self.tcx(),
|
self.tcx(),
|
||||||
self.fields.param_env,
|
self.fields.param_env,
|
||||||
ty::Binder::dummy(ty::PredicateKind::Subtype(ty::SubtypePredicate {
|
ty::Binder::dummy(ty::PredicateKind::Subtype(ty::SubtypePredicate {
|
||||||
@@ -151,7 +151,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for TypeRelating<'_, '_, 'tcx> {
|
|||||||
&& !infcx.next_trait_solver() =>
|
&& !infcx.next_trait_solver() =>
|
||||||
{
|
{
|
||||||
// FIXME: Don't shuttle between Goal and Obligation
|
// FIXME: Don't shuttle between Goal and Obligation
|
||||||
self.fields.obligations.extend(
|
self.fields.goals.extend(
|
||||||
infcx
|
infcx
|
||||||
.handle_opaque_type(a, b, &self.fields.trace.cause, self.param_env())?
|
.handle_opaque_type(a, b, &self.fields.trace.cause, self.param_env())?
|
||||||
.obligations
|
.obligations
|
||||||
@@ -298,7 +298,7 @@ impl<'tcx> TypeRelation<TyCtxt<'tcx>> for TypeRelating<'_, '_, 'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> ObligationEmittingRelation<'tcx> for TypeRelating<'_, '_, 'tcx> {
|
impl<'tcx> PredicateEmittingRelation<'tcx> for TypeRelating<'_, '_, 'tcx> {
|
||||||
fn span(&self) -> Span {
|
fn span(&self) -> Span {
|
||||||
self.fields.trace.span()
|
self.fields.trace.span()
|
||||||
}
|
}
|
||||||
@@ -318,14 +318,14 @@ impl<'tcx> ObligationEmittingRelation<'tcx> for TypeRelating<'_, '_, 'tcx> {
|
|||||||
self.fields.register_predicates(obligations);
|
self.fields.register_predicates(obligations);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_obligations(
|
fn register_goals(
|
||||||
&mut self,
|
&mut self,
|
||||||
obligations: impl IntoIterator<Item = Goal<'tcx, ty::Predicate<'tcx>>>,
|
obligations: impl IntoIterator<Item = Goal<'tcx, ty::Predicate<'tcx>>>,
|
||||||
) {
|
) {
|
||||||
self.fields.register_obligations(obligations);
|
self.fields.register_obligations(obligations);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_type_relate_obligation(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) {
|
fn register_alias_relate_predicate(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) {
|
||||||
self.register_predicates([ty::Binder::dummy(match self.ambient_variance {
|
self.register_predicates([ty::Binder::dummy(match self.ambient_variance {
|
||||||
ty::Variance::Covariant => ty::PredicateKind::AliasRelate(
|
ty::Variance::Covariant => ty::PredicateKind::AliasRelate(
|
||||||
a.into(),
|
a.into(),
|
||||||
|
|||||||
Reference in New Issue
Block a user