@@ -627,6 +627,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
627627 } ,
628628 generics : Some ( self . encode_generics ( def_id) ) ,
629629 predicates : Some ( self . encode_predicates ( def_id) ) ,
630+ predicates_defined_on : None ,
630631
631632 mir : self . encode_optimized_mir ( def_id) ,
632633 }
@@ -664,6 +665,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
664665 variances : LazySeq :: empty ( ) ,
665666 generics : None ,
666667 predicates : None ,
668+ predicates_defined_on : None ,
667669
668670 mir : None
669671 }
@@ -704,6 +706,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
704706 variances : LazySeq :: empty ( ) ,
705707 generics : Some ( self . encode_generics ( def_id) ) ,
706708 predicates : Some ( self . encode_predicates ( def_id) ) ,
709+ predicates_defined_on : None ,
707710
708711 mir : None ,
709712 }
@@ -761,6 +764,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
761764 } ,
762765 generics : Some ( self . encode_generics ( def_id) ) ,
763766 predicates : Some ( self . encode_predicates ( def_id) ) ,
767+ predicates_defined_on : None ,
764768
765769 mir : self . encode_optimized_mir ( def_id) ,
766770 }
@@ -778,6 +782,12 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
778782 self . lazy ( & tcx. predicates_of ( def_id) )
779783 }
780784
785+ fn encode_predicates_defined_on ( & mut self , def_id : DefId ) -> Lazy < ty:: GenericPredicates < ' tcx > > {
786+ debug ! ( "IsolatedEncoder::encode_predicates_defined_on({:?})" , def_id) ;
787+ let tcx = self . tcx ;
788+ self . lazy ( & tcx. predicates_defined_on ( def_id) )
789+ }
790+
781791 fn encode_info_for_trait_item ( & mut self , def_id : DefId ) -> Entry < ' tcx > {
782792 debug ! ( "IsolatedEncoder::encode_info_for_trait_item({:?})" , def_id) ;
783793 let tcx = self . tcx ;
@@ -867,6 +877,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
867877 } ,
868878 generics : Some ( self . encode_generics ( def_id) ) ,
869879 predicates : Some ( self . encode_predicates ( def_id) ) ,
880+ predicates_defined_on : None ,
870881
871882 mir : self . encode_optimized_mir ( def_id) ,
872883 }
@@ -963,6 +974,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
963974 } ,
964975 generics : Some ( self . encode_generics ( def_id) ) ,
965976 predicates : Some ( self . encode_predicates ( def_id) ) ,
977+ predicates_defined_on : None ,
966978
967979 mir : if mir { self . encode_optimized_mir ( def_id) } else { None } ,
968980 }
@@ -1226,6 +1238,16 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
12261238 _ => None ,
12271239 } ,
12281240
1241+ // The only time that `predicates_defined_on` is used (on
1242+ // an external item) is for traits, during chalk lowering,
1243+ // so only encode it in that case as an efficiency
1244+ // hack. (No reason not to expand it in the future if
1245+ // necessary.)
1246+ predicates_defined_on : match item. node {
1247+ hir:: ItemTrait ( ..) => Some ( self . encode_predicates_defined_on ( def_id) ) ,
1248+ _ => None , // not *wrong* for other kinds of items, but not needed
1249+ } ,
1250+
12291251 mir : match item. node {
12301252 hir:: ItemStatic ( ..) => {
12311253 self . encode_optimized_mir ( def_id)
@@ -1276,6 +1298,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
12761298 variances : LazySeq :: empty ( ) ,
12771299 generics : None ,
12781300 predicates : None ,
1301+ predicates_defined_on : None ,
12791302 mir : None ,
12801303 }
12811304 }
@@ -1303,6 +1326,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
13031326 variances : LazySeq :: empty ( ) ,
13041327 generics : None ,
13051328 predicates : None ,
1329+ predicates_defined_on : None ,
13061330
13071331 mir : None ,
13081332 }
@@ -1347,6 +1371,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
13471371 variances : LazySeq :: empty ( ) ,
13481372 generics : Some ( self . encode_generics ( def_id) ) ,
13491373 predicates : None ,
1374+ predicates_defined_on : None ,
13501375
13511376 mir : self . encode_optimized_mir ( def_id) ,
13521377 }
@@ -1374,6 +1399,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
13741399 variances : LazySeq :: empty ( ) ,
13751400 generics : Some ( self . encode_generics ( def_id) ) ,
13761401 predicates : Some ( self . encode_predicates ( def_id) ) ,
1402+ predicates_defined_on : None ,
13771403
13781404 mir : self . encode_optimized_mir ( def_id) ,
13791405 }
@@ -1575,6 +1601,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
15751601 } ,
15761602 generics : Some ( self . encode_generics ( def_id) ) ,
15771603 predicates : Some ( self . encode_predicates ( def_id) ) ,
1604+ predicates_defined_on : None ,
15781605
15791606 mir : None ,
15801607 }
0 commit comments