@@ -76,8 +76,8 @@ struct PerDefTables<'tcx> {
7676 inherent_impls : PerDefTable < Lazy < [ DefIndex ] > > ,
7777 variances : PerDefTable < Lazy < [ ty:: Variance ] > > ,
7878 generics : PerDefTable < Lazy < ty:: Generics > > ,
79- predicates : PerDefTable < Lazy < ty:: GenericPredicates < ' tcx > > > ,
80- predicates_defined_on : PerDefTable < Lazy < ty:: GenericPredicates < ' tcx > > > ,
79+ explicit_predicates : PerDefTable < Lazy < ty:: GenericPredicates < ' tcx > > > ,
80+ inferred_outlives : PerDefTable < Lazy < & ' tcx [ ( ty:: Predicate < ' tcx > , Span ) ] > > ,
8181 super_predicates : PerDefTable < Lazy < ty:: GenericPredicates < ' tcx > > > ,
8282
8383 mir : PerDefTable < Lazy < mir:: Body < ' tcx > > > ,
@@ -524,8 +524,8 @@ impl<'tcx> EncodeContext<'tcx> {
524524 inherent_impls : self . per_def . inherent_impls . encode ( & mut self . opaque ) ,
525525 variances : self . per_def . variances . encode ( & mut self . opaque ) ,
526526 generics : self . per_def . generics . encode ( & mut self . opaque ) ,
527- predicates : self . per_def . predicates . encode ( & mut self . opaque ) ,
528- predicates_defined_on : self . per_def . predicates_defined_on . encode ( & mut self . opaque ) ,
527+ explicit_predicates : self . per_def . explicit_predicates . encode ( & mut self . opaque ) ,
528+ inferred_outlives : self . per_def . inferred_outlives . encode ( & mut self . opaque ) ,
529529 super_predicates : self . per_def . super_predicates . encode ( & mut self . opaque ) ,
530530
531531 mir : self . per_def . mir . encode ( & mut self . opaque ) ,
@@ -675,7 +675,8 @@ impl EncodeContext<'tcx> {
675675 self . encode_variances_of ( def_id) ;
676676 }
677677 self . encode_generics ( def_id) ;
678- self . encode_predicates ( def_id) ;
678+ self . encode_explicit_predicates ( def_id) ;
679+ self . encode_inferred_outlives ( def_id) ;
679680 self . encode_optimized_mir ( def_id) ;
680681 self . encode_promoted_mir ( def_id) ;
681682 }
@@ -718,7 +719,8 @@ impl EncodeContext<'tcx> {
718719 self . encode_variances_of ( def_id) ;
719720 }
720721 self . encode_generics ( def_id) ;
721- self . encode_predicates ( def_id) ;
722+ self . encode_explicit_predicates ( def_id) ;
723+ self . encode_inferred_outlives ( def_id) ;
722724 self . encode_optimized_mir ( def_id) ;
723725 self . encode_promoted_mir ( def_id) ;
724726 }
@@ -776,7 +778,8 @@ impl EncodeContext<'tcx> {
776778 self . encode_deprecation ( def_id) ;
777779 self . encode_item_type ( def_id) ;
778780 self . encode_generics ( def_id) ;
779- self . encode_predicates ( def_id) ;
781+ self . encode_explicit_predicates ( def_id) ;
782+ self . encode_inferred_outlives ( def_id) ;
780783 }
781784
782785 fn encode_struct_ctor ( & mut self , adt_def_id : DefId , def_id : DefId ) {
@@ -819,7 +822,8 @@ impl EncodeContext<'tcx> {
819822 self . encode_variances_of ( def_id) ;
820823 }
821824 self . encode_generics ( def_id) ;
822- self . encode_predicates ( def_id) ;
825+ self . encode_explicit_predicates ( def_id) ;
826+ self . encode_inferred_outlives ( def_id) ;
823827 self . encode_optimized_mir ( def_id) ;
824828 self . encode_promoted_mir ( def_id) ;
825829 }
@@ -829,15 +833,18 @@ impl EncodeContext<'tcx> {
829833 record ! ( self . per_def. generics[ def_id] <- self . tcx. generics_of( def_id) ) ;
830834 }
831835
832- fn encode_predicates ( & mut self , def_id : DefId ) {
833- debug ! ( "EncodeContext::encode_predicates({:?})" , def_id) ;
834- record ! ( self . per_def. predicates[ def_id] <- self . tcx. predicates_of( def_id) ) ;
836+ fn encode_explicit_predicates ( & mut self , def_id : DefId ) {
837+ debug ! ( "EncodeContext::encode_explicit_predicates({:?})" , def_id) ;
838+ record ! ( self . per_def. explicit_predicates[ def_id] <-
839+ self . tcx. explicit_predicates_of( def_id) ) ;
835840 }
836841
837- fn encode_predicates_defined_on ( & mut self , def_id : DefId ) {
838- debug ! ( "EncodeContext::encode_predicates_defined_on({:?})" , def_id) ;
839- record ! ( self . per_def. predicates_defined_on[ def_id] <-
840- self . tcx. predicates_defined_on( def_id) )
842+ fn encode_inferred_outlives ( & mut self , def_id : DefId ) {
843+ debug ! ( "EncodeContext::encode_inferred_outlives({:?})" , def_id) ;
844+ let inferred_outlives = self . tcx . inferred_outlives_of ( def_id) ;
845+ if !inferred_outlives. is_empty ( ) {
846+ record ! ( self . per_def. inferred_outlives[ def_id] <- inferred_outlives) ;
847+ }
841848 }
842849
843850 fn encode_super_predicates ( & mut self , def_id : DefId ) {
@@ -919,7 +926,8 @@ impl EncodeContext<'tcx> {
919926 self . encode_variances_of ( def_id) ;
920927 }
921928 self . encode_generics ( def_id) ;
922- self . encode_predicates ( def_id) ;
929+ self . encode_explicit_predicates ( def_id) ;
930+ self . encode_inferred_outlives ( def_id) ;
923931 self . encode_optimized_mir ( def_id) ;
924932 self . encode_promoted_mir ( def_id) ;
925933 }
@@ -986,7 +994,8 @@ impl EncodeContext<'tcx> {
986994 self . encode_variances_of ( def_id) ;
987995 }
988996 self . encode_generics ( def_id) ;
989- self . encode_predicates ( def_id) ;
997+ self . encode_explicit_predicates ( def_id) ;
998+ self . encode_inferred_outlives ( def_id) ;
990999 let mir = match ast_item. kind {
9911000 hir:: ImplItemKind :: Const ( ..) => true ,
9921001 hir:: ImplItemKind :: Method ( ref sig, _) => {
@@ -1260,22 +1269,11 @@ impl EncodeContext<'tcx> {
12601269 hir:: ItemKind :: Trait ( ..) |
12611270 hir:: ItemKind :: TraitAlias ( ..) => {
12621271 self . encode_generics ( def_id) ;
1263- self . encode_predicates ( def_id) ;
1272+ self . encode_explicit_predicates ( def_id) ;
1273+ self . encode_inferred_outlives ( def_id) ;
12641274 }
12651275 _ => { }
12661276 }
1267- // The only time that `predicates_defined_on` is used (on
1268- // an external item) is for traits, during chalk lowering,
1269- // so only encode it in that case as an efficiency
1270- // hack. (No reason not to expand it in the future if
1271- // necessary.)
1272- match item. kind {
1273- hir:: ItemKind :: Trait ( ..) |
1274- hir:: ItemKind :: TraitAlias ( ..) => {
1275- self . encode_predicates_defined_on ( def_id) ;
1276- }
1277- _ => { } // not *wrong* for other kinds of items, but not needed
1278- }
12791277 match item. kind {
12801278 hir:: ItemKind :: Trait ( ..) |
12811279 hir:: ItemKind :: TraitAlias ( ..) => {
@@ -1377,7 +1375,8 @@ impl EncodeContext<'tcx> {
13771375 record ! ( self . per_def. span[ def_id] <- self . tcx. def_span( def_id) ) ;
13781376 self . encode_item_type ( def_id) ;
13791377 self . encode_generics ( def_id) ;
1380- self . encode_predicates ( def_id) ;
1378+ self . encode_explicit_predicates ( def_id) ;
1379+ self . encode_inferred_outlives ( def_id) ;
13811380 self . encode_optimized_mir ( def_id) ;
13821381 self . encode_promoted_mir ( def_id) ;
13831382 }
@@ -1588,7 +1587,8 @@ impl EncodeContext<'tcx> {
15881587 self . encode_variances_of ( def_id) ;
15891588 }
15901589 self . encode_generics ( def_id) ;
1591- self . encode_predicates ( def_id) ;
1590+ self . encode_explicit_predicates ( def_id) ;
1591+ self . encode_inferred_outlives ( def_id) ;
15921592 }
15931593}
15941594
0 commit comments