Skip to content

Commit 44be25d

Browse files
don't create a predicate for just a comparison
1 parent 8696fa7 commit 44be25d

File tree

1 file changed

+10
-4
lines changed
  • compiler/rustc_ty_utils/src

1 file changed

+10
-4
lines changed

Diff for: compiler/rustc_ty_utils/src/ty.rs

+10-4
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,17 @@ fn sized_constraint_for_ty<'tcx>(
5858
// we know that `T` is Sized and do not need to check
5959
// it on the impl.
6060

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] };
6462
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+
}
6672
}
6773

6874
Placeholder(..) | Bound(..) | Infer(..) => {

0 commit comments

Comments
 (0)