@@ -81,8 +81,10 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
8181 {
8282 let mut violations = vec ! [ ] ;
8383
84- if self . supertraits_reference_self ( trait_def_id) {
85- violations. push ( ObjectSafetyViolation :: SupertraitSelf ) ;
84+ for def_id in traits:: supertrait_def_ids ( self , trait_def_id) {
85+ if self . predicates_reference_self ( def_id, true ) {
86+ violations. push ( ObjectSafetyViolation :: SupertraitSelf ) ;
87+ }
8688 }
8789
8890 debug ! ( "astconv_object_safety_violations(trait_def_id={:?}) = {:?}" ,
@@ -115,7 +117,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
115117 if self . trait_has_sized_self ( trait_def_id) {
116118 violations. push ( ObjectSafetyViolation :: SizedSelf ) ;
117119 }
118- if self . supertraits_reference_self ( trait_def_id) {
120+ if self . predicates_reference_self ( trait_def_id, false ) {
119121 violations. push ( ObjectSafetyViolation :: SupertraitSelf ) ;
120122 }
121123
@@ -126,12 +128,20 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
126128 violations
127129 }
128130
129- fn supertraits_reference_self ( self , trait_def_id : DefId ) -> bool {
131+ fn predicates_reference_self (
132+ self ,
133+ trait_def_id : DefId ,
134+ supertraits_only : bool ) -> bool
135+ {
130136 let trait_ref = ty:: Binder ( ty:: TraitRef {
131137 def_id : trait_def_id,
132138 substs : Substs :: identity_for_item ( self , trait_def_id)
133139 } ) ;
134- let predicates = self . item_super_predicates ( trait_def_id) ;
140+ let predicates = if supertraits_only {
141+ self . item_super_predicates ( trait_def_id)
142+ } else {
143+ self . item_predicates ( trait_def_id)
144+ } ;
135145 predicates
136146 . predicates
137147 . into_iter ( )
0 commit comments