File tree 1 file changed +10
-4
lines changed
compiler/rustc_ty_utils/src
1 file changed +10
-4
lines changed Original file line number Diff line number Diff line change @@ -58,11 +58,17 @@ fn sized_constraint_for_ty<'tcx>(
58
58
// we know that `T` is Sized and do not need to check
59
59
// it on the impl.
60
60
61
- let Some ( sized_trait) = tcx. lang_items ( ) . sized_trait ( ) else { return vec ! [ ty] } ;
62
- let sized_predicate =
63
- ty:: TraitRef :: new ( tcx, sized_trait, [ ty] ) . without_const ( ) . to_predicate ( tcx) ;
61
+ let Some ( sized_trait_def_id) = tcx. lang_items ( ) . sized_trait ( ) else { return vec ! [ ty] } ;
64
62
let predicates = tcx. predicates_of ( adtdef. did ( ) ) . predicates ;
65
- if predicates. iter ( ) . any ( |( p, _) | * p == sized_predicate) { vec ! [ ] } else { vec ! [ ty] }
63
+ if predicates. iter ( ) . any ( |( p, _) | {
64
+ p. as_trait_clause ( ) . is_some_and ( |trait_pred| {
65
+ trait_pred. def_id ( ) == sized_trait_def_id && trait_pred. self_ty ( ) . skip_binder ( ) == ty
66
+ } )
67
+ } ) {
68
+ vec ! [ ]
69
+ } else {
70
+ vec ! [ ty]
71
+ }
66
72
}
67
73
68
74
Placeholder ( ..) | Bound ( ..) | Infer ( ..) => {
You can’t perform that action at this time.
0 commit comments