@@ -76,8 +76,8 @@ struct PerDefTables<'tcx> {
76
76
inherent_impls : PerDefTable < Lazy < [ DefIndex ] > > ,
77
77
variances : PerDefTable < Lazy < [ ty:: Variance ] > > ,
78
78
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 ) ] > > ,
81
81
super_predicates : PerDefTable < Lazy < ty:: GenericPredicates < ' tcx > > > ,
82
82
83
83
mir : PerDefTable < Lazy < mir:: Body < ' tcx > > > ,
@@ -524,8 +524,8 @@ impl<'tcx> EncodeContext<'tcx> {
524
524
inherent_impls : self . per_def . inherent_impls . encode ( & mut self . opaque ) ,
525
525
variances : self . per_def . variances . encode ( & mut self . opaque ) ,
526
526
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 ) ,
529
529
super_predicates : self . per_def . super_predicates . encode ( & mut self . opaque ) ,
530
530
531
531
mir : self . per_def . mir . encode ( & mut self . opaque ) ,
@@ -675,7 +675,8 @@ impl EncodeContext<'tcx> {
675
675
self . encode_variances_of ( def_id) ;
676
676
}
677
677
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) ;
679
680
self . encode_optimized_mir ( def_id) ;
680
681
self . encode_promoted_mir ( def_id) ;
681
682
}
@@ -718,7 +719,8 @@ impl EncodeContext<'tcx> {
718
719
self . encode_variances_of ( def_id) ;
719
720
}
720
721
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) ;
722
724
self . encode_optimized_mir ( def_id) ;
723
725
self . encode_promoted_mir ( def_id) ;
724
726
}
@@ -776,7 +778,8 @@ impl EncodeContext<'tcx> {
776
778
self . encode_deprecation ( def_id) ;
777
779
self . encode_item_type ( def_id) ;
778
780
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) ;
780
783
}
781
784
782
785
fn encode_struct_ctor ( & mut self , adt_def_id : DefId , def_id : DefId ) {
@@ -819,7 +822,8 @@ impl EncodeContext<'tcx> {
819
822
self . encode_variances_of ( def_id) ;
820
823
}
821
824
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) ;
823
827
self . encode_optimized_mir ( def_id) ;
824
828
self . encode_promoted_mir ( def_id) ;
825
829
}
@@ -829,15 +833,18 @@ impl EncodeContext<'tcx> {
829
833
record ! ( self . per_def. generics[ def_id] <- self . tcx. generics_of( def_id) ) ;
830
834
}
831
835
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) ) ;
835
840
}
836
841
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
+ }
841
848
}
842
849
843
850
fn encode_super_predicates ( & mut self , def_id : DefId ) {
@@ -919,7 +926,8 @@ impl EncodeContext<'tcx> {
919
926
self . encode_variances_of ( def_id) ;
920
927
}
921
928
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) ;
923
931
self . encode_optimized_mir ( def_id) ;
924
932
self . encode_promoted_mir ( def_id) ;
925
933
}
@@ -986,7 +994,8 @@ impl EncodeContext<'tcx> {
986
994
self . encode_variances_of ( def_id) ;
987
995
}
988
996
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) ;
990
999
let mir = match ast_item. kind {
991
1000
hir:: ImplItemKind :: Const ( ..) => true ,
992
1001
hir:: ImplItemKind :: Method ( ref sig, _) => {
@@ -1260,22 +1269,11 @@ impl EncodeContext<'tcx> {
1260
1269
hir:: ItemKind :: Trait ( ..) |
1261
1270
hir:: ItemKind :: TraitAlias ( ..) => {
1262
1271
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) ;
1264
1274
}
1265
1275
_ => { }
1266
1276
}
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
- }
1279
1277
match item. kind {
1280
1278
hir:: ItemKind :: Trait ( ..) |
1281
1279
hir:: ItemKind :: TraitAlias ( ..) => {
@@ -1377,7 +1375,8 @@ impl EncodeContext<'tcx> {
1377
1375
record ! ( self . per_def. span[ def_id] <- self . tcx. def_span( def_id) ) ;
1378
1376
self . encode_item_type ( def_id) ;
1379
1377
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) ;
1381
1380
self . encode_optimized_mir ( def_id) ;
1382
1381
self . encode_promoted_mir ( def_id) ;
1383
1382
}
@@ -1588,7 +1587,8 @@ impl EncodeContext<'tcx> {
1588
1587
self . encode_variances_of ( def_id) ;
1589
1588
}
1590
1589
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) ;
1592
1592
}
1593
1593
}
1594
1594
0 commit comments