@@ -19,9 +19,8 @@ use rustc_middle::query::Providers;
19
19
use rustc_middle:: traits:: solve:: NoSolution ;
20
20
use rustc_middle:: ty:: trait_def:: TraitSpecializationKind ;
21
21
use 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 ,
25
24
} ;
26
25
use rustc_middle:: { bug, span_bug} ;
27
26
use rustc_session:: parse:: feature_err;
@@ -2349,8 +2348,11 @@ impl<'tcx> WfCheckingCtxt<'_, 'tcx> {
2349
2348
if let ty:: ClauseKind :: WellFormed ( ..) = pred. kind ( ) . skip_binder ( ) {
2350
2349
continue ;
2351
2350
}
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
+ {
2354
2356
let pred = self . normalize ( span, None , pred) ;
2355
2357
2356
2358
// only use the span of the predicate clause (#90869)
0 commit comments