diff options
| author | Michael Goulet <michael@errs.io> | 2025-07-20 17:44:55 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2025-07-20 17:45:01 +0000 |
| commit | 1e96d7a55304f8573b6dfeb5ccbdabdb407b89b9 (patch) | |
| tree | bd4a6b035e34ef145ae60090224efc8de666ed7e /compiler/rustc_trait_selection/src/solve/delegate.rs | |
| parent | 0864097cd31ee30f5081ba588a5c9820c2c6fc71 (diff) | |
| download | rust-1e96d7a55304f8573b6dfeb5ccbdabdb407b89b9.tar.gz rust-1e96d7a55304f8573b6dfeb5ccbdabdb407b89b9.zip | |
Consider param-env for fast path
Diffstat (limited to 'compiler/rustc_trait_selection/src/solve/delegate.rs')
| -rw-r--r-- | compiler/rustc_trait_selection/src/solve/delegate.rs | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/compiler/rustc_trait_selection/src/solve/delegate.rs b/compiler/rustc_trait_selection/src/solve/delegate.rs index 17429e15cce..7426504e139 100644 --- a/compiler/rustc_trait_selection/src/solve/delegate.rs +++ b/compiler/rustc_trait_selection/src/solve/delegate.rs @@ -12,11 +12,11 @@ use rustc_infer::traits::solve::Goal; use rustc_middle::traits::query::NoSolution; use rustc_middle::traits::solve::Certainty; use rustc_middle::ty::{ - self, SizedTraitKind, Ty, TyCtxt, TypeFlags, TypeFoldable, TypeVisitableExt as _, TypingMode, + self, Ty, TyCtxt, TypeFlags, TypeFoldable, TypeVisitableExt as _, TypingMode, }; use rustc_span::{DUMMY_SP, ErrorGuaranteed, Span}; -use crate::traits::{EvaluateConstErr, ObligationCause, specialization_graph}; +use crate::traits::{EvaluateConstErr, ObligationCause, sizedness_fast_path, specialization_graph}; #[repr(transparent)] pub struct SolverDelegate<'tcx>(InferCtxt<'tcx>); @@ -76,19 +76,11 @@ impl<'tcx> rustc_next_trait_solver::delegate::SolverDelegate for SolverDelegate< if trait_pred.polarity() == ty::PredicatePolarity::Positive { match self.0.tcx.as_lang_item(trait_pred.def_id()) { - Some(LangItem::Sized) - if self - .resolve_vars_if_possible(trait_pred.self_ty().skip_binder()) - .has_trivial_sizedness(self.0.tcx, SizedTraitKind::Sized) => - { - return Some(Certainty::Yes); - } - Some(LangItem::MetaSized) - if self - .resolve_vars_if_possible(trait_pred.self_ty().skip_binder()) - .has_trivial_sizedness(self.0.tcx, SizedTraitKind::MetaSized) => - { - return Some(Certainty::Yes); + Some(LangItem::Sized) | Some(LangItem::MetaSized) => { + let predicate = self.resolve_vars_if_possible(goal.predicate); + if sizedness_fast_path(self.tcx, predicate, goal.param_env) { + return Some(Certainty::Yes); + } } Some(LangItem::Copy | LangItem::Clone) => { let self_ty = |
