Rename some things

This commit is contained in:
Michael Goulet
2024-06-07 10:13:05 -04:00
parent 44a6f72a72
commit 4efb13b0c2
10 changed files with 46 additions and 44 deletions

View File

@@ -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(),

View File

@@ -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(

View File

@@ -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;

View File

@@ -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>);
} }

View File

@@ -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,

View File

@@ -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(),

View File

@@ -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

View File

@@ -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(),

View File

@@ -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;

View File

@@ -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(),