1818//! On success, the LUB/GLB operations return the appropriate bound. The
1919//! return value of `Equate` or `Sub` shouldn't really be used.
2020
21+ pub use rustc_next_trait_solver:: relate:: combine:: * ;
22+
2123use super :: glb:: Glb ;
2224use super :: lub:: Lub ;
2325use super :: type_relating:: TypeRelating ;
26+ use super :: RelateResult ;
2427use super :: StructurallyRelateAliases ;
25- use super :: { RelateResult , TypeRelation } ;
2628use crate :: infer:: relate;
2729use crate :: infer:: { DefineOpaqueTypes , InferCtxt , TypeTrace } ;
2830use crate :: traits:: { Obligation , PredicateObligation } ;
@@ -32,7 +34,6 @@ use rustc_middle::traits::solve::Goal;
3234use rustc_middle:: ty:: error:: { ExpectedFound , TypeError } ;
3335use rustc_middle:: ty:: { self , InferConst , Ty , TyCtxt , TypeVisitableExt , Upcast } ;
3436use rustc_middle:: ty:: { IntType , UintType } ;
35- use rustc_span:: Span ;
3637
3738#[ derive( Clone ) ]
3839pub struct CombineFields < ' infcx , ' tcx > {
@@ -76,7 +77,7 @@ impl<'tcx> InferCtxt<'tcx> {
7677 b : Ty < ' tcx > ,
7778 ) -> RelateResult < ' tcx , Ty < ' tcx > >
7879 where
79- R : PredicateEmittingRelation < ' tcx > ,
80+ R : PredicateEmittingRelation < InferCtxt < ' tcx > > ,
8081 {
8182 debug_assert ! ( !a. has_escaping_bound_vars( ) ) ;
8283 debug_assert ! ( !b. has_escaping_bound_vars( ) ) ;
@@ -171,7 +172,7 @@ impl<'tcx> InferCtxt<'tcx> {
171172 b : ty:: Const < ' tcx > ,
172173 ) -> RelateResult < ' tcx , ty:: Const < ' tcx > >
173174 where
174- R : PredicateEmittingRelation < ' tcx > ,
175+ R : PredicateEmittingRelation < InferCtxt < ' tcx > > ,
175176 {
176177 debug ! ( "{}.consts({:?}, {:?})" , relation. tag( ) , a, b) ;
177178 debug_assert ! ( !a. has_escaping_bound_vars( ) ) ;
@@ -323,30 +324,3 @@ impl<'infcx, 'tcx> CombineFields<'infcx, 'tcx> {
323324 )
324325 }
325326}
326-
327- pub trait PredicateEmittingRelation < ' tcx > : TypeRelation < TyCtxt < ' tcx > > {
328- fn span ( & self ) -> Span ;
329-
330- fn param_env ( & self ) -> ty:: ParamEnv < ' tcx > ;
331-
332- /// Whether aliases should be related structurally. This is pretty much
333- /// always `No` unless you're equating in some specific locations of the
334- /// new solver. See the comments in these use-cases for more details.
335- fn structurally_relate_aliases ( & self ) -> StructurallyRelateAliases ;
336-
337- /// Register obligations that must hold in order for this relation to hold
338- fn register_goals (
339- & mut self ,
340- obligations : impl IntoIterator < Item = Goal < ' tcx , ty:: Predicate < ' tcx > > > ,
341- ) ;
342-
343- /// Register predicates that must hold in order for this relation to hold.
344- /// This uses the default `param_env` of the obligation.
345- fn register_predicates (
346- & mut self ,
347- obligations : impl IntoIterator < Item : Upcast < TyCtxt < ' tcx > , ty:: Predicate < ' tcx > > > ,
348- ) ;
349-
350- /// Register `AliasRelate` obligation(s) that both types must be related to each other.
351- fn register_alias_relate_predicate ( & mut self , a : Ty < ' tcx > , b : Ty < ' tcx > ) ;
352- }
0 commit comments