@@ -82,7 +82,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
82
82
let mut violations = vec ! [ ] ;
83
83
84
84
for def_id in traits:: supertrait_def_ids ( self , trait_def_id) {
85
- if self . supertraits_reference_self ( def_id) {
85
+ if self . predicates_reference_self ( def_id, true ) {
86
86
violations. push ( ObjectSafetyViolation :: SupertraitSelf ) ;
87
87
}
88
88
}
@@ -117,7 +117,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
117
117
if self . trait_has_sized_self ( trait_def_id) {
118
118
violations. push ( ObjectSafetyViolation :: SizedSelf ) ;
119
119
}
120
- if self . supertraits_reference_self ( trait_def_id) {
120
+ if self . predicates_reference_self ( trait_def_id, false ) {
121
121
violations. push ( ObjectSafetyViolation :: SupertraitSelf ) ;
122
122
}
123
123
@@ -128,12 +128,20 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
128
128
violations
129
129
}
130
130
131
- 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
+ {
132
136
let trait_ref = ty:: Binder ( ty:: TraitRef {
133
137
def_id : trait_def_id,
134
138
substs : Substs :: identity_for_item ( self , trait_def_id)
135
139
} ) ;
136
- 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
+ } ;
137
145
predicates
138
146
. predicates
139
147
. into_iter ( )
0 commit comments