Get rid of PredicateObligations
This commit is contained in:
parent
0c960618b5
commit
4038010436
10 changed files with 20 additions and 26 deletions
|
@ -3,7 +3,7 @@ use rustc_errors::ErrorGuaranteed;
|
||||||
use rustc_infer::infer::relate::{ObligationEmittingRelation, StructurallyRelateAliases};
|
use rustc_infer::infer::relate::{ObligationEmittingRelation, 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::{Obligation, PredicateObligations};
|
use rustc_infer::traits::{Obligation, PredicateObligation};
|
||||||
use rustc_middle::mir::ConstraintCategory;
|
use rustc_middle::mir::ConstraintCategory;
|
||||||
use rustc_middle::span_bug;
|
use rustc_middle::span_bug;
|
||||||
use rustc_middle::traits::query::NoSolution;
|
use rustc_middle::traits::query::NoSolution;
|
||||||
|
@ -560,7 +560,7 @@ impl<'bccx, 'tcx> ObligationEmittingRelation<'tcx> for NllTypeRelating<'_, 'bccx
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_obligations(&mut self, obligations: PredicateObligations<'tcx>) {
|
fn register_obligations(&mut self, obligations: Vec<PredicateObligation<'tcx>>) {
|
||||||
let _: Result<_, ErrorGuaranteed> = self.type_checker.fully_perform_op(
|
let _: Result<_, ErrorGuaranteed> = self.type_checker.fully_perform_op(
|
||||||
self.locations,
|
self.locations,
|
||||||
self.category,
|
self.category,
|
||||||
|
|
|
@ -113,7 +113,7 @@ fn simple<'tcx>(kind: Adjust<'tcx>) -> impl FnOnce(Ty<'tcx>) -> Vec<Adjustment<'
|
||||||
fn success<'tcx>(
|
fn success<'tcx>(
|
||||||
adj: Vec<Adjustment<'tcx>>,
|
adj: Vec<Adjustment<'tcx>>,
|
||||||
target: Ty<'tcx>,
|
target: Ty<'tcx>,
|
||||||
obligations: traits::PredicateObligations<'tcx>,
|
obligations: Vec<traits::PredicateObligation<'tcx>>,
|
||||||
) -> CoerceResult<'tcx> {
|
) -> CoerceResult<'tcx> {
|
||||||
Ok(InferOk { value: (adj, target), obligations })
|
Ok(InferOk { value: (adj, target), obligations })
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,9 +9,7 @@ pub use SubregionOrigin::*;
|
||||||
pub use ValuePairs::*;
|
pub use ValuePairs::*;
|
||||||
|
|
||||||
use crate::infer::relate::{CombineFields, RelateResult};
|
use crate::infer::relate::{CombineFields, RelateResult};
|
||||||
use crate::traits::{
|
use crate::traits::{self, ObligationCause, ObligationInspector, PredicateObligation, TraitEngine};
|
||||||
self, ObligationCause, ObligationInspector, PredicateObligations, TraitEngine,
|
|
||||||
};
|
|
||||||
use error_reporting::TypeErrCtxt;
|
use error_reporting::TypeErrCtxt;
|
||||||
use free_regions::RegionRelations;
|
use free_regions::RegionRelations;
|
||||||
use lexical_region_resolve::LexicalRegionResolutions;
|
use lexical_region_resolve::LexicalRegionResolutions;
|
||||||
|
@ -68,7 +66,7 @@ pub mod type_variable;
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct InferOk<'tcx, T> {
|
pub struct InferOk<'tcx, T> {
|
||||||
pub value: T,
|
pub value: T,
|
||||||
pub obligations: PredicateObligations<'tcx>,
|
pub obligations: Vec<PredicateObligation<'tcx>>,
|
||||||
}
|
}
|
||||||
pub type InferResult<'tcx, T> = Result<InferOk<'tcx, T>, TypeError<'tcx>>;
|
pub type InferResult<'tcx, T> = Result<InferOk<'tcx, T>, TypeError<'tcx>>;
|
||||||
|
|
||||||
|
@ -748,7 +746,7 @@ impl<'tcx, T> InferOk<'tcx, T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> InferOk<'tcx, ()> {
|
impl<'tcx> InferOk<'tcx, ()> {
|
||||||
pub fn into_obligations(self) -> PredicateObligations<'tcx> {
|
pub fn into_obligations(self) -> Vec<PredicateObligation<'tcx>> {
|
||||||
self.obligations
|
self.obligations
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ use super::StructurallyRelateAliases;
|
||||||
use super::{RelateResult, TypeRelation};
|
use super::{RelateResult, TypeRelation};
|
||||||
use crate::infer::relate;
|
use crate::infer::relate;
|
||||||
use crate::infer::{DefineOpaqueTypes, InferCtxt, TypeTrace};
|
use crate::infer::{DefineOpaqueTypes, InferCtxt, TypeTrace};
|
||||||
use crate::traits::{Obligation, PredicateObligations};
|
use crate::traits::{Obligation, PredicateObligation};
|
||||||
use rustc_middle::bug;
|
use rustc_middle::bug;
|
||||||
use rustc_middle::infer::unify_key::EffectVarValue;
|
use rustc_middle::infer::unify_key::EffectVarValue;
|
||||||
use rustc_middle::ty::error::{ExpectedFound, TypeError};
|
use rustc_middle::ty::error::{ExpectedFound, TypeError};
|
||||||
|
@ -38,7 +38,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: PredicateObligations<'tcx>,
|
pub obligations: Vec<PredicateObligation<'tcx>>,
|
||||||
pub define_opaque_types: DefineOpaqueTypes,
|
pub define_opaque_types: DefineOpaqueTypes,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,7 +290,7 @@ impl<'infcx, 'tcx> CombineFields<'infcx, 'tcx> {
|
||||||
Glb::new(self)
|
Glb::new(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn register_obligations(&mut self, obligations: PredicateObligations<'tcx>) {
|
pub fn register_obligations(&mut self, obligations: Vec<PredicateObligation<'tcx>>) {
|
||||||
self.obligations.extend(obligations);
|
self.obligations.extend(obligations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -315,7 +315,7 @@ 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(&mut self, obligations: PredicateObligations<'tcx>);
|
fn register_obligations(&mut self, obligations: Vec<PredicateObligation<'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. Uses
|
||||||
/// a default obligation cause, [`ObligationEmittingRelation::register_obligations`] should
|
/// a default obligation cause, [`ObligationEmittingRelation::register_obligations`] should
|
||||||
|
|
|
@ -8,7 +8,7 @@ use super::combine::{CombineFields, ObligationEmittingRelation};
|
||||||
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};
|
||||||
use crate::traits::{ObligationCause, PredicateObligations};
|
use crate::traits::{ObligationCause, PredicateObligation};
|
||||||
|
|
||||||
/// "Greatest lower bound" (common subtype)
|
/// "Greatest lower bound" (common subtype)
|
||||||
pub struct Glb<'combine, 'infcx, 'tcx> {
|
pub struct Glb<'combine, 'infcx, 'tcx> {
|
||||||
|
@ -147,7 +147,7 @@ impl<'tcx> ObligationEmittingRelation<'tcx> for Glb<'_, '_, 'tcx> {
|
||||||
self.fields.register_predicates(obligations);
|
self.fields.register_predicates(obligations);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_obligations(&mut self, obligations: PredicateObligations<'tcx>) {
|
fn register_obligations(&mut self, obligations: Vec<PredicateObligation<'tcx>>) {
|
||||||
self.fields.register_obligations(obligations);
|
self.fields.register_obligations(obligations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ use super::combine::{CombineFields, ObligationEmittingRelation};
|
||||||
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};
|
||||||
use crate::traits::{ObligationCause, PredicateObligations};
|
use crate::traits::{ObligationCause, PredicateObligation};
|
||||||
|
|
||||||
use super::{Relate, RelateResult, TypeRelation};
|
use super::{Relate, RelateResult, TypeRelation};
|
||||||
use rustc_middle::ty::{self, Ty, TyCtxt, TypeVisitableExt};
|
use rustc_middle::ty::{self, Ty, TyCtxt, TypeVisitableExt};
|
||||||
|
@ -147,7 +147,7 @@ impl<'tcx> ObligationEmittingRelation<'tcx> for Lub<'_, '_, 'tcx> {
|
||||||
self.fields.register_predicates(obligations);
|
self.fields.register_predicates(obligations);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_obligations(&mut self, obligations: PredicateObligations<'tcx>) {
|
fn register_obligations(&mut self, obligations: Vec<PredicateObligation<'tcx>>) {
|
||||||
self.fields.register_obligations(obligations)
|
self.fields.register_obligations(obligations)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use super::combine::CombineFields;
|
use super::combine::CombineFields;
|
||||||
use crate::infer::BoundRegionConversionTime::HigherRankedType;
|
use crate::infer::BoundRegionConversionTime::HigherRankedType;
|
||||||
use crate::infer::{DefineOpaqueTypes, SubregionOrigin};
|
use crate::infer::{DefineOpaqueTypes, SubregionOrigin};
|
||||||
use crate::traits::{Obligation, PredicateObligations};
|
use crate::traits::{Obligation, PredicateObligation};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
relate_args_invariantly, relate_args_with_variances, ObligationEmittingRelation, Relate,
|
relate_args_invariantly, relate_args_with_variances, ObligationEmittingRelation, Relate,
|
||||||
|
@ -318,7 +318,7 @@ impl<'tcx> ObligationEmittingRelation<'tcx> for TypeRelating<'_, '_, 'tcx> {
|
||||||
self.fields.register_predicates(obligations);
|
self.fields.register_predicates(obligations);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_obligations(&mut self, obligations: PredicateObligations<'tcx>) {
|
fn register_obligations(&mut self, obligations: Vec<PredicateObligation<'tcx>>) {
|
||||||
self.fields.register_obligations(obligations);
|
self.fields.register_obligations(obligations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -114,8 +114,6 @@ impl<'tcx> PolyTraitObligation<'tcx> {
|
||||||
#[cfg(target_pointer_width = "64")]
|
#[cfg(target_pointer_width = "64")]
|
||||||
rustc_data_structures::static_assert_size!(PredicateObligation<'_>, 48);
|
rustc_data_structures::static_assert_size!(PredicateObligation<'_>, 48);
|
||||||
|
|
||||||
pub type PredicateObligations<'tcx> = Vec<PredicateObligation<'tcx>>;
|
|
||||||
|
|
||||||
pub type Selection<'tcx> = ImplSource<'tcx, PredicateObligation<'tcx>>;
|
pub type Selection<'tcx> = ImplSource<'tcx, PredicateObligation<'tcx>>;
|
||||||
|
|
||||||
/// A callback that can be provided to `inspect_typeck`. Invoked on evaluation
|
/// A callback that can be provided to `inspect_typeck`. Invoked on evaluation
|
||||||
|
|
|
@ -12,9 +12,7 @@ use crate::traits::select::IntercrateAmbiguityCause;
|
||||||
use crate::traits::NormalizeExt;
|
use crate::traits::NormalizeExt;
|
||||||
use crate::traits::SkipLeakCheck;
|
use crate::traits::SkipLeakCheck;
|
||||||
use crate::traits::{util, FulfillmentErrorCode};
|
use crate::traits::{util, FulfillmentErrorCode};
|
||||||
use crate::traits::{
|
use crate::traits::{Obligation, ObligationCause, PredicateObligation, SelectionContext};
|
||||||
Obligation, ObligationCause, PredicateObligation, PredicateObligations, SelectionContext,
|
|
||||||
};
|
|
||||||
use rustc_data_structures::fx::FxIndexSet;
|
use rustc_data_structures::fx::FxIndexSet;
|
||||||
use rustc_errors::{Diag, EmissionGuarantee};
|
use rustc_errors::{Diag, EmissionGuarantee};
|
||||||
use rustc_hir::def::DefKind;
|
use rustc_hir::def::DefKind;
|
||||||
|
@ -305,7 +303,7 @@ fn equate_impl_headers<'tcx>(
|
||||||
param_env: ty::ParamEnv<'tcx>,
|
param_env: ty::ParamEnv<'tcx>,
|
||||||
impl1: &ty::ImplHeader<'tcx>,
|
impl1: &ty::ImplHeader<'tcx>,
|
||||||
impl2: &ty::ImplHeader<'tcx>,
|
impl2: &ty::ImplHeader<'tcx>,
|
||||||
) -> Option<PredicateObligations<'tcx>> {
|
) -> Option<Vec<PredicateObligation<'tcx>>> {
|
||||||
let result =
|
let result =
|
||||||
match (impl1.trait_ref, impl2.trait_ref) {
|
match (impl1.trait_ref, impl2.trait_ref) {
|
||||||
(Some(impl1_ref), Some(impl2_ref)) => infcx
|
(Some(impl1_ref), Some(impl2_ref)) => infcx
|
||||||
|
|
|
@ -5,7 +5,7 @@ use crate::infer::{InferCtxt, InferOk};
|
||||||
use crate::traits::{ObligationCause, ObligationCtxt};
|
use crate::traits::{ObligationCause, ObligationCtxt};
|
||||||
use rustc_errors::ErrorGuaranteed;
|
use rustc_errors::ErrorGuaranteed;
|
||||||
use rustc_infer::infer::canonical::Certainty;
|
use rustc_infer::infer::canonical::Certainty;
|
||||||
use rustc_infer::traits::PredicateObligations;
|
use rustc_infer::traits::PredicateObligation;
|
||||||
use rustc_middle::traits::query::NoSolution;
|
use rustc_middle::traits::query::NoSolution;
|
||||||
use rustc_middle::ty::fold::TypeFoldable;
|
use rustc_middle::ty::fold::TypeFoldable;
|
||||||
use rustc_middle::ty::{ParamEnvAnd, TyCtxt};
|
use rustc_middle::ty::{ParamEnvAnd, TyCtxt};
|
||||||
|
@ -103,7 +103,7 @@ pub trait QueryTypeOp<'tcx>: fmt::Debug + Copy + TypeFoldable<TyCtxt<'tcx>> + 't
|
||||||
(
|
(
|
||||||
Self::QueryResponse,
|
Self::QueryResponse,
|
||||||
Option<Canonical<'tcx, ParamEnvAnd<'tcx, Self>>>,
|
Option<Canonical<'tcx, ParamEnvAnd<'tcx, Self>>>,
|
||||||
PredicateObligations<'tcx>,
|
Vec<PredicateObligation<'tcx>>,
|
||||||
Certainty,
|
Certainty,
|
||||||
),
|
),
|
||||||
NoSolution,
|
NoSolution,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue