diff options
| author | Michael Goulet <michael@errs.io> | 2025-05-28 11:14:43 +0000 | 
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2025-06-02 19:23:20 +0000 | 
| commit | 3418d5db3aa619f19f59f4ee341f6683ed6743b4 (patch) | |
| tree | 663c879c28f40614dad3738e30a3572208d47881 /compiler/rustc_trait_selection/src/solve/delegate.rs | |
| parent | 2398bd60ef526e686a38a299cc2fa991d8b3c33e (diff) | |
| download | rust-3418d5db3aa619f19f59f4ee341f6683ed6743b4.tar.gz rust-3418d5db3aa619f19f59f4ee341f6683ed6743b4.zip | |
Fast path for stalled obligations on self ty
Diffstat (limited to 'compiler/rustc_trait_selection/src/solve/delegate.rs')
| -rw-r--r-- | compiler/rustc_trait_selection/src/solve/delegate.rs | 10 | 
1 files changed, 10 insertions, 0 deletions
| diff --git a/compiler/rustc_trait_selection/src/solve/delegate.rs b/compiler/rustc_trait_selection/src/solve/delegate.rs index e92e37b8738..406acdb7d88 100644 --- a/compiler/rustc_trait_selection/src/solve/delegate.rs +++ b/compiler/rustc_trait_selection/src/solve/delegate.rs @@ -64,6 +64,16 @@ impl<'tcx> rustc_next_trait_solver::delegate::SolverDelegate for SolverDelegate< span: Span, ) -> Option<Certainty> { if let Some(trait_pred) = goal.predicate.as_trait_clause() { + if self.shallow_resolve(trait_pred.self_ty().skip_binder()).is_ty_var() + // We don't do this fast path when opaques are defined since we may + // eventually use opaques to incompletely guide inference via ty var + // self types. + // FIXME: Properly consider opaques here. + && self.inner.borrow_mut().opaque_types().is_empty() + { + return Some(Certainty::AMBIGUOUS); + } + if trait_pred.polarity() == ty::PredicatePolarity::Positive { match self.0.tcx.as_lang_item(trait_pred.def_id()) { Some(LangItem::Sized) | 
