@@ -19,9 +19,8 @@ use rustc_middle::query::Providers;
1919use rustc_middle:: traits:: solve:: NoSolution ;
2020use rustc_middle:: ty:: trait_def:: TraitSpecializationKind ;
2121use rustc_middle:: ty:: {
22- self , AdtKind , GenericArgKind , GenericArgs , GenericParamDefKind , Ty , TyCtxt , TypeFlags ,
23- TypeFoldable , TypeSuperVisitable , TypeVisitable , TypeVisitableExt , TypeVisitor , TypingMode ,
24- Upcast ,
22+ self , AdtKind , GenericArgKind , GenericArgs , GenericParamDefKind , Ty , TyCtxt , TypeFoldable ,
23+ TypeSuperVisitable , TypeVisitable , TypeVisitableExt , TypeVisitor , TypingMode , Upcast ,
2524} ;
2625use rustc_middle:: { bug, span_bug} ;
2726use rustc_session:: parse:: feature_err;
@@ -2349,8 +2348,11 @@ impl<'tcx> WfCheckingCtxt<'_, 'tcx> {
23492348 if let ty:: ClauseKind :: WellFormed ( ..) = pred. kind ( ) . skip_binder ( ) {
23502349 continue ;
23512350 }
2352- // Match the existing behavior.
2353- if pred. is_global ( ) && !pred. has_type_flags ( TypeFlags :: HAS_BINDER_VARS ) {
2351+ // Match the existing behavior and carve out an exception for `for<'a> Ty: Trait`.
2352+ if pred. is_global ( )
2353+ && !pred. kind ( ) . skip_binder ( ) . has_escaping_bound_vars ( )
2354+ && pred. kind ( ) . bound_vars ( ) . is_empty ( )
2355+ {
23542356 let pred = self . normalize ( span, None , pred) ;
23552357
23562358 // only use the span of the predicate clause (#90869)
0 commit comments