diff options
| author | Michael Goulet <michael@errs.io> | 2025-07-02 00:32:54 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2025-07-02 00:37:40 +0000 |
| commit | 91c53c97a990e9d1ab87b2d932362a53236fba49 (patch) | |
| tree | a13a6929fcd784790af9b4308f5b9f944dc2c0dc /compiler/rustc_trait_selection/src | |
| parent | d3c0ef0c9fb000d09529e2ff71ed2e69e224a8d6 (diff) | |
| download | rust-91c53c97a990e9d1ab87b2d932362a53236fba49.tar.gz rust-91c53c97a990e9d1ab87b2d932362a53236fba49.zip | |
Consider polarity in sizedness fast path
Diffstat (limited to 'compiler/rustc_trait_selection/src')
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/util.rs | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/compiler/rustc_trait_selection/src/traits/util.rs b/compiler/rustc_trait_selection/src/traits/util.rs index a05bae53566..141454bfe37 100644 --- a/compiler/rustc_trait_selection/src/traits/util.rs +++ b/compiler/rustc_trait_selection/src/traits/util.rs @@ -368,16 +368,17 @@ pub fn sizedness_fast_path<'tcx>(tcx: TyCtxt<'tcx>, predicate: ty::Predicate<'tc // Proving `Sized`/`MetaSized`, very often on "obviously sized" types like // `&T`, accounts for about 60% percentage of the predicates we have to prove. No need to // canonicalize and all that for such cases. - if let ty::PredicateKind::Clause(ty::ClauseKind::Trait(trait_ref)) = + if let ty::PredicateKind::Clause(ty::ClauseKind::Trait(trait_pred)) = predicate.kind().skip_binder() + && trait_pred.polarity == ty::PredicatePolarity::Positive { - let sizedness = match tcx.as_lang_item(trait_ref.def_id()) { + let sizedness = match tcx.as_lang_item(trait_pred.def_id()) { Some(LangItem::Sized) => SizedTraitKind::Sized, Some(LangItem::MetaSized) => SizedTraitKind::MetaSized, _ => return false, }; - if trait_ref.self_ty().has_trivial_sizedness(tcx, sizedness) { + if trait_pred.self_ty().has_trivial_sizedness(tcx, sizedness) { debug!("fast path -- trivial sizedness"); return true; } |
