@@ -30,6 +30,7 @@ use rustc_middle::ty::fold::{TypeFoldable, TypeVisitor};
30
30
use rustc_middle:: ty:: relate:: { self , Relate , RelateResult , TypeRelation } ;
31
31
use rustc_middle:: ty:: { self , InferConst , Ty , TyCtxt } ;
32
32
use std:: fmt:: Debug ;
33
+ use std:: marker:: PhantomData ;
33
34
use std:: ops:: ControlFlow ;
34
35
35
36
#[ derive( PartialEq ) ]
44
45
{
45
46
/// Callback to use when we deduce an outlives relationship
46
47
delegate : D ,
47
- _infcx : std :: marker :: PhantomData < & ' cx mut InferCtxt < ' cx , ' tcx > > ,
48
+ _infcx : PhantomData < & ' cx mut InferCtxt < ' cx , ' tcx > > ,
48
49
49
50
/// How are we relating `a` and `b`?
50
51
///
@@ -136,7 +137,7 @@ where
136
137
delegate : D ,
137
138
ambient_variance : ty:: Variance ,
138
139
) -> Self {
139
- Self { _infcx : std :: marker :: PhantomData , delegate, ambient_variance, a_scopes : vec ! [ ] , b_scopes : vec ! [ ] }
140
+ Self { _infcx : PhantomData , delegate, ambient_variance, a_scopes : vec ! [ ] , b_scopes : vec ! [ ] }
140
141
}
141
142
142
143
fn ambient_covariance ( & self ) -> bool {
@@ -355,15 +356,17 @@ where
355
356
let universe = self . delegate . infcx ( ) . probe_ty_var ( for_vid) . unwrap_err ( ) ;
356
357
357
358
let mut generalizer = TypeGeneralizer {
358
- infcx : self . delegate . infcx ( ) ,
359
- delegate : & mut self . delegate ,
359
+ _tcx : PhantomData ,
360
+ delegate : self . delegate ,
360
361
first_free_index : ty:: INNERMOST ,
361
362
ambient_variance : self . ambient_variance ,
362
363
for_vid_sub_root : self . delegate . infcx ( ) . inner . type_variables ( ) . sub_root_var ( for_vid) ,
363
364
universe,
364
365
} ;
365
366
366
- generalizer. relate ( value, value)
367
+ let relation = generalizer. relate ( value, value) ;
368
+ self . delegate = generalizer. delegate ;
369
+ relation
367
370
}
368
371
}
369
372
@@ -786,13 +789,12 @@ impl<'me, 'tcx> TypeVisitor<'tcx> for ScopeInstantiator<'me, 'tcx> {
786
789
/// scopes.
787
790
///
788
791
/// [blog post]: https://is.gd/0hKvIr
789
- struct TypeGeneralizer < ' me , ' tcx , D >
792
+ struct TypeGeneralizer < ' cx , ' tcx , D >
790
793
where
791
- D : TypeRelatingDelegate < ' me , ' tcx > ,
794
+ D : TypeRelatingDelegate < ' cx , ' tcx > ,
792
795
{
793
- infcx : & ' me InferCtxt < ' me , ' tcx > ,
794
-
795
- delegate : & ' me mut D ,
796
+ _tcx : PhantomData < ( & ' cx ( ) , & ' tcx ( ) ) > ,
797
+ delegate : D ,
796
798
797
799
/// After we generalize this type, we are going to relative it to
798
800
/// some other type. What will be the variance at this point?
@@ -873,8 +875,7 @@ where
873
875
}
874
876
875
877
ty:: Infer ( ty:: TyVar ( vid) ) => {
876
- let mut inner = self . infcx . inner ;
877
- let variables = & mut inner. type_variables ( ) ;
878
+ let variables = self . delegate . infcx ( ) . inner . type_variables ( ) ;
878
879
let vid = variables. root_var ( vid) ;
879
880
let sub_vid = variables. sub_root_var ( vid) ;
880
881
if sub_vid == self . for_vid_sub_root {
@@ -976,8 +977,7 @@ where
976
977
bug ! ( "unexpected inference variable encountered in NLL generalization: {:?}" , a) ;
977
978
}
978
979
ty:: ConstKind :: Infer ( InferConst :: Var ( vid) ) => {
979
- let mut inner = self . infcx . inner ;
980
- let variable_table = & mut inner. const_unification_table ( ) ;
980
+ let mut variable_table = self . delegate . infcx ( ) . inner . const_unification_table ( ) ;
981
981
let var_value = variable_table. probe_value ( vid) ;
982
982
match var_value. val . known ( ) {
983
983
Some ( u) => self . relate ( u, u) ,
0 commit comments