From 3418d5db3aa619f19f59f4ee341f6683ed6743b4 Mon Sep 17 00:00:00 2001 From: Michael Goulet Date: Wed, 28 May 2025 11:14:43 +0000 Subject: Fast path for stalled obligations on self ty --- compiler/rustc_trait_selection/src/solve/delegate.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'compiler/rustc_trait_selection/src/solve/delegate.rs') 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 { 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) -- cgit 1.4.1-3-g733a5