@@ -666,15 +666,17 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
666
666
let tcx = self . infcx . tcx ;
667
667
668
668
// Find out if the predicates show that the type is a Fn or FnMut
669
- let find_fn_kind_from_did =
670
- |predicates : ty:: EarlyBinder < & [ ( ty:: Predicate < ' tcx > , Span ) ] > , substs| {
671
- predicates. 0 . iter ( ) . find_map ( |( pred, _) | {
669
+ let find_fn_kind_from_did = |predicates : ty:: EarlyBinder <
670
+ & [ ( ty:: Predicate < ' tcx > , Span ) ] ,
671
+ > ,
672
+ substs| {
673
+ predicates. 0 . iter ( ) . find_map ( |( pred, _) | {
672
674
let pred = if let Some ( substs) = substs {
673
675
predicates. rebind ( * pred) . subst ( tcx, substs) . kind ( ) . skip_binder ( )
674
676
} else {
675
677
pred. kind ( ) . skip_binder ( )
676
678
} ;
677
- if let ty:: PredicateKind :: Trait ( pred) = pred && pred. self_ty ( ) == ty {
679
+ if let ty:: PredicateKind :: Clause ( ty :: Clause :: Trait ( pred) ) = pred && pred. self_ty ( ) == ty {
678
680
if Some ( pred. def_id ( ) ) == tcx. lang_items ( ) . fn_trait ( ) {
679
681
return Some ( hir:: Mutability :: Not ) ;
680
682
} else if Some ( pred. def_id ( ) ) == tcx. lang_items ( ) . fn_mut_trait ( ) {
@@ -683,7 +685,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
683
685
}
684
686
None
685
687
} )
686
- } ;
688
+ } ;
687
689
688
690
// If the type is opaque/param/closure, and it is Fn or FnMut, let's suggest (mutably)
689
691
// borrowing the type, since `&mut F: FnMut` iff `F: FnMut` and similarly for `Fn`.
@@ -784,13 +786,15 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
784
786
let predicates: Result < Vec < _ > , _ > = errors
785
787
. into_iter ( )
786
788
. map ( |err| match err. obligation . predicate . kind ( ) . skip_binder ( ) {
787
- PredicateKind :: Trait ( predicate) => match predicate. self_ty ( ) . kind ( ) {
788
- ty:: Param ( param_ty) => Ok ( (
789
- generics. type_param ( param_ty, tcx) ,
790
- predicate. trait_ref . print_only_trait_path ( ) . to_string ( ) ,
791
- ) ) ,
792
- _ => Err ( ( ) ) ,
793
- } ,
789
+ PredicateKind :: Clause ( ty:: Clause :: Trait ( predicate) ) => {
790
+ match predicate. self_ty ( ) . kind ( ) {
791
+ ty:: Param ( param_ty) => Ok ( (
792
+ generics. type_param ( param_ty, tcx) ,
793
+ predicate. trait_ref . print_only_trait_path ( ) . to_string ( ) ,
794
+ ) ) ,
795
+ _ => Err ( ( ) ) ,
796
+ }
797
+ }
794
798
_ => Err ( ( ) ) ,
795
799
} )
796
800
. collect ( ) ;
0 commit comments