@@ -203,11 +203,19 @@ impl<'a, 'tcx> SpecializedEncoder<interpret::AllocId> for EncodeContext<'a, 'tcx
203203 }
204204}
205205
206+ impl < ' a , ' tcx > SpecializedEncoder < Vec < ty:: Predicate < ' tcx > > > for EncodeContext < ' a , ' tcx > {
207+ fn specialized_encode ( & mut self ,
208+ predicates : & Vec < ty:: Predicate < ' tcx > > )
209+ -> Result < ( ) , Self :: Error > {
210+ ty_codec:: encode_predicates ( self , predicates, |ecx| & mut ecx. predicate_shorthands )
211+ }
212+ }
213+
206214impl < ' a , ' tcx > SpecializedEncoder < ty:: GenericPredicates < ' tcx > > for EncodeContext < ' a , ' tcx > {
207215 fn specialized_encode ( & mut self ,
208216 predicates : & ty:: GenericPredicates < ' tcx > )
209217 -> Result < ( ) , Self :: Error > {
210- ty_codec:: encode_predicates ( self , predicates, |ecx| & mut ecx. predicate_shorthands )
218+ ty_codec:: encode_generic_predicates ( self , predicates, |ecx| & mut ecx. predicate_shorthands )
211219 }
212220}
213221
@@ -613,8 +621,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
613621 LazySeq :: empty ( )
614622 } ,
615623 generics : Some ( self . encode_generics ( def_id) ) ,
616- predicates : Some ( self . encode_predicates ( def_id) ) ,
617- predicates_defined_on : None ,
624+ explicit_predicates : Some ( self . encode_explicit_predicates ( def_id) ) ,
625+ inferred_outlives : Some ( self . encode_inferred_outlives ( def_id ) ) ,
618626
619627 mir : self . encode_optimized_mir ( def_id) ,
620628 }
@@ -669,8 +677,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
669677 LazySeq :: empty ( )
670678 } ,
671679 generics : Some ( self . encode_generics ( def_id) ) ,
672- predicates : Some ( self . encode_predicates ( def_id) ) ,
673- predicates_defined_on : None ,
680+ explicit_predicates : Some ( self . encode_explicit_predicates ( def_id) ) ,
681+ inferred_outlives : Some ( self . encode_inferred_outlives ( def_id ) ) ,
674682
675683 mir : self . encode_optimized_mir ( def_id) ,
676684 }
@@ -707,8 +715,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
707715 inherent_impls : LazySeq :: empty ( ) ,
708716 variances : LazySeq :: empty ( ) ,
709717 generics : None ,
710- predicates : None ,
711- predicates_defined_on : None ,
718+ explicit_predicates : None ,
719+ inferred_outlives : None ,
712720
713721 mir : None
714722 }
@@ -748,8 +756,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
748756 inherent_impls : LazySeq :: empty ( ) ,
749757 variances : LazySeq :: empty ( ) ,
750758 generics : Some ( self . encode_generics ( def_id) ) ,
751- predicates : Some ( self . encode_predicates ( def_id) ) ,
752- predicates_defined_on : None ,
759+ explicit_predicates : Some ( self . encode_explicit_predicates ( def_id) ) ,
760+ inferred_outlives : Some ( self . encode_inferred_outlives ( def_id ) ) ,
753761
754762 mir : None ,
755763 }
@@ -808,8 +816,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
808816 LazySeq :: empty ( )
809817 } ,
810818 generics : Some ( self . encode_generics ( def_id) ) ,
811- predicates : Some ( self . encode_predicates ( def_id) ) ,
812- predicates_defined_on : None ,
819+ explicit_predicates : Some ( self . encode_explicit_predicates ( def_id) ) ,
820+ inferred_outlives : Some ( self . encode_inferred_outlives ( def_id ) ) ,
813821
814822 mir : self . encode_optimized_mir ( def_id) ,
815823 }
@@ -821,16 +829,16 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
821829 self . lazy ( tcx. generics_of ( def_id) )
822830 }
823831
824- fn encode_predicates ( & mut self , def_id : DefId ) -> Lazy < ty:: GenericPredicates < ' tcx > > {
825- debug ! ( "IsolatedEncoder::encode_predicates ({:?})" , def_id) ;
832+ fn encode_explicit_predicates ( & mut self , def_id : DefId ) -> Lazy < ty:: GenericPredicates < ' tcx > > {
833+ debug ! ( "IsolatedEncoder::encode_explicit_predicates ({:?})" , def_id) ;
826834 let tcx = self . tcx ;
827- self . lazy ( & tcx. predicates_of ( def_id) )
835+ self . lazy ( & tcx. explicit_predicates_of ( def_id) )
828836 }
829837
830- fn encode_predicates_defined_on ( & mut self , def_id : DefId ) -> Lazy < ty:: GenericPredicates < ' tcx > > {
831- debug ! ( "IsolatedEncoder::encode_predicates_defined_on ({:?})" , def_id) ;
838+ fn encode_inferred_outlives ( & mut self , def_id : DefId ) -> Lazy < Vec < ty:: Predicate < ' tcx > > > {
839+ debug ! ( "IsolatedEncoder::encode_inferred_outlives ({:?})" , def_id) ;
832840 let tcx = self . tcx ;
833- self . lazy ( & tcx. predicates_defined_on ( def_id) )
841+ self . lazy ( & tcx. inferred_outlives_of ( def_id) )
834842 }
835843
836844 fn encode_info_for_trait_item ( & mut self , def_id : DefId ) -> Entry < ' tcx > {
@@ -924,8 +932,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
924932 LazySeq :: empty ( )
925933 } ,
926934 generics : Some ( self . encode_generics ( def_id) ) ,
927- predicates : Some ( self . encode_predicates ( def_id) ) ,
928- predicates_defined_on : None ,
935+ explicit_predicates : Some ( self . encode_explicit_predicates ( def_id) ) ,
936+ inferred_outlives : Some ( self . encode_inferred_outlives ( def_id ) ) ,
929937
930938 mir : self . encode_optimized_mir ( def_id) ,
931939 }
@@ -1023,8 +1031,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
10231031 LazySeq :: empty ( )
10241032 } ,
10251033 generics : Some ( self . encode_generics ( def_id) ) ,
1026- predicates : Some ( self . encode_predicates ( def_id) ) ,
1027- predicates_defined_on : None ,
1034+ explicit_predicates : Some ( self . encode_explicit_predicates ( def_id) ) ,
1035+ inferred_outlives : Some ( self . encode_inferred_outlives ( def_id ) ) ,
10281036
10291037 mir : if mir { self . encode_optimized_mir ( def_id) } else { None } ,
10301038 }
@@ -1280,7 +1288,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
12801288 hir:: ItemKind :: TraitAlias ( ..) => Some ( self . encode_generics ( def_id) ) ,
12811289 _ => None ,
12821290 } ,
1283- predicates : match item. node {
1291+ explicit_predicates : match item. node {
12841292 hir:: ItemKind :: Static ( ..) |
12851293 hir:: ItemKind :: Const ( ..) |
12861294 hir:: ItemKind :: Fn ( ..) |
@@ -1291,19 +1299,22 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
12911299 hir:: ItemKind :: Impl ( ..) |
12921300 hir:: ItemKind :: Existential ( ..) |
12931301 hir:: ItemKind :: Trait ( ..) |
1294- hir:: ItemKind :: TraitAlias ( ..) => Some ( self . encode_predicates ( def_id) ) ,
1302+ hir:: ItemKind :: TraitAlias ( ..) => Some ( self . encode_explicit_predicates ( def_id) ) ,
12951303 _ => None ,
12961304 } ,
1297-
1298- // The only time that `predicates_defined_on` is used (on
1299- // an external item) is for traits, during chalk lowering,
1300- // so only encode it in that case as an efficiency
1301- // hack. (No reason not to expand it in the future if
1302- // necessary.)
1303- predicates_defined_on : match item. node {
1305+ inferred_outlives : match item. node {
1306+ hir:: ItemKind :: Static ( ..) |
1307+ hir:: ItemKind :: Const ( ..) |
1308+ hir:: ItemKind :: Fn ( ..) |
1309+ hir:: ItemKind :: Ty ( ..) |
1310+ hir:: ItemKind :: Enum ( ..) |
1311+ hir:: ItemKind :: Struct ( ..) |
1312+ hir:: ItemKind :: Union ( ..) |
1313+ hir:: ItemKind :: Impl ( ..) |
1314+ hir:: ItemKind :: Existential ( ..) |
13041315 hir:: ItemKind :: Trait ( ..) |
1305- hir:: ItemKind :: TraitAlias ( ..) => Some ( self . encode_predicates_defined_on ( def_id) ) ,
1306- _ => None , // not *wrong* for other kinds of items, but not needed
1316+ hir:: ItemKind :: TraitAlias ( ..) => Some ( self . encode_inferred_outlives ( def_id) ) ,
1317+ _ => None ,
13071318 } ,
13081319
13091320 mir : match item. node {
@@ -1352,8 +1363,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
13521363 inherent_impls : LazySeq :: empty ( ) ,
13531364 variances : LazySeq :: empty ( ) ,
13541365 generics : None ,
1355- predicates : None ,
1356- predicates_defined_on : None ,
1366+ explicit_predicates : None ,
1367+ inferred_outlives : None ,
13571368 mir : None ,
13581369 }
13591370 }
@@ -1377,8 +1388,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
13771388 inherent_impls : LazySeq :: empty ( ) ,
13781389 variances : LazySeq :: empty ( ) ,
13791390 generics : None ,
1380- predicates : None ,
1381- predicates_defined_on : None ,
1391+ explicit_predicates : None ,
1392+ inferred_outlives : None ,
13821393
13831394 mir : None ,
13841395 }
@@ -1437,8 +1448,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
14371448 inherent_impls : LazySeq :: empty ( ) ,
14381449 variances : LazySeq :: empty ( ) ,
14391450 generics : Some ( self . encode_generics ( def_id) ) ,
1440- predicates : None ,
1441- predicates_defined_on : None ,
1451+ explicit_predicates : None ,
1452+ inferred_outlives : None ,
14421453
14431454 mir : self . encode_optimized_mir ( def_id) ,
14441455 }
@@ -1465,8 +1476,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
14651476 inherent_impls : LazySeq :: empty ( ) ,
14661477 variances : LazySeq :: empty ( ) ,
14671478 generics : Some ( self . encode_generics ( def_id) ) ,
1468- predicates : Some ( self . encode_predicates ( def_id) ) ,
1469- predicates_defined_on : None ,
1479+ explicit_predicates : Some ( self . encode_explicit_predicates ( def_id) ) ,
1480+ inferred_outlives : Some ( self . encode_inferred_outlives ( def_id ) ) ,
14701481
14711482 mir : self . encode_optimized_mir ( def_id) ,
14721483 }
@@ -1668,8 +1679,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
16681679 _ => LazySeq :: empty ( ) ,
16691680 } ,
16701681 generics : Some ( self . encode_generics ( def_id) ) ,
1671- predicates : Some ( self . encode_predicates ( def_id) ) ,
1672- predicates_defined_on : None ,
1682+ explicit_predicates : Some ( self . encode_explicit_predicates ( def_id) ) ,
1683+ inferred_outlives : Some ( self . encode_inferred_outlives ( def_id ) ) ,
16731684
16741685 mir : None ,
16751686 }
0 commit comments