@@ -53,7 +53,7 @@ use crate::errors::{self, ObligationCauseFailureCode, TypeErrorAdditionalDiags};
5353use crate :: infer;
5454use crate :: infer:: error_reporting:: nice_region_error:: find_anon_type:: find_anon_type;
5555use crate :: infer:: ExpectedFound ;
56- use crate :: traits:: util:: elaborate_predicates_of;
56+ use crate :: traits:: util:: { elaborate_predicates_of, filter_predicates } ;
5757use crate :: traits:: {
5858 IfExpressionCause , MatchExpressionArmCause , ObligationCause , ObligationCauseCode ,
5959 PredicateObligation ,
@@ -498,20 +498,9 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
498498 self . tcx ,
499499 generic_param_scope. into ( ) ,
500500 ) )
501- . filter_map ( |( pred, pred_span) | {
502- if let ty:: PredicateKind :: Clause ( clause) =
503- pred. kind ( ) . skip_binder ( )
504- && let ty:: ClauseKind :: TypeOutlives ( ty:: OutlivesPredicate (
505- _pred_ty,
506- r,
507- ) ) = clause
508- && r. kind ( ) == ty:: ReStatic
509- {
510- Some ( pred_span)
511- } else {
512- None
513- }
514- } )
501+ . filter_map ( filter_predicates ( self . tcx . lifetimes . re_static , |_| {
502+ true
503+ } ) )
515504 . collect ( ) ;
516505
517506 if !spans. is_empty ( ) {
@@ -2750,19 +2739,7 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
27502739 if let Some ( def_id) = ptr. trait_ref . trait_def_id ( ) {
27512740 // Find the bounds on the trait with the lifetime that couldn't be met.
27522741 let bindings: Vec < Span > = elaborate_predicates_of ( self . tcx , def_id)
2753- . filter_map ( |( pred, pred_span) | {
2754- if let ty:: PredicateKind :: Clause ( clause) =
2755- pred. kind ( ) . skip_binder ( )
2756- && let ty:: ClauseKind :: TypeOutlives (
2757- ty:: OutlivesPredicate ( _pred_ty, r) ,
2758- ) = clause
2759- && r == self . found_region
2760- {
2761- Some ( pred_span)
2762- } else {
2763- None
2764- }
2765- } )
2742+ . filter_map ( filter_predicates ( self . found_region , |_| true ) )
27662743 . collect ( ) ;
27672744 if !bindings. is_empty ( ) {
27682745 self . lifetime_spans . insert ( ptr. span ) ;
@@ -2775,21 +2752,7 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
27752752 // definition of that associated item couldn't meet.
27762753 hir:: TyKind :: Path ( hir:: QPath :: Resolved ( Some ( _) , path) ) => {
27772754 self . pred_spans = elaborate_predicates_of ( self . tcx , path. res . def_id ( ) )
2778- . filter_map ( |( pred, pred_span) | {
2779- match pred. kind ( ) . skip_binder ( ) {
2780- ty:: PredicateKind :: Clause ( ty:: ClauseKind :: TypeOutlives (
2781- ty:: OutlivesPredicate (
2782- // What should I filter this with?
2783- _pred_ty,
2784- r,
2785- ) ,
2786- ) ) if r == self . found_region => Some ( pred_span) ,
2787- ty:: PredicateKind :: Clause ( ty:: ClauseKind :: RegionOutlives (
2788- ty:: OutlivesPredicate ( _, r) ,
2789- ) ) if r == self . found_region => Some ( pred_span) ,
2790- _ => None ,
2791- }
2792- } )
2755+ . filter_map ( filter_predicates ( self . found_region , |_| true ) )
27932756 . collect ( ) ;
27942757 }
27952758 _ => { }
0 commit comments