@@ -232,7 +232,7 @@ pub trait PrettyPrinter<'tcx>: Printer<'tcx> + fmt::Write {
232232        f :  F , 
233233    )  -> Result < ( ) ,  PrintError > 
234234    where 
235-         T :  Print < ' tcx ,   Self >  +  TypeFoldable < TyCtxt < ' tcx > > , 
235+         T :  TypeFoldable < TyCtxt < ' tcx > > , 
236236    { 
237237        f ( value. as_ref ( ) . skip_binder ( ) ,  self ) 
238238    } 
@@ -1056,7 +1056,7 @@ pub trait PrettyPrinter<'tcx>: Printer<'tcx> + fmt::Write {
10561056        // Insert parenthesis around (Fn(A, B) -> C) if the opaque ty has more than one other trait 
10571057        let  paren_needed = fn_traits. len ( )  > 1  || traits. len ( )  > 0  || !has_sized_bound; 
10581058
1059-         for  ( ( bound_args ,  is_async) ,  entry)  in  fn_traits { 
1059+         for  ( ( bound_args_and_self_ty ,  is_async) ,  entry)  in  fn_traits { 
10601060            write ! ( self ,  "{}" ,  if  first {  ""  }  else {  " + "  } ) ?; 
10611061            write ! ( self ,  "{}" ,  if  paren_needed {  "("  }  else {  ""  } ) ?; 
10621062
@@ -1067,7 +1067,7 @@ pub trait PrettyPrinter<'tcx>: Printer<'tcx> + fmt::Write {
10671067            } ; 
10681068
10691069            if  let  Some ( return_ty)  = entry. return_ty  { 
1070-                 self . wrap_binder ( & bound_args ,  |args,  cx| { 
1070+                 self . wrap_binder ( & bound_args_and_self_ty ,  |( args,  _ ) ,  cx| { 
10711071                    define_scoped_cx ! ( cx) ; 
10721072                    p ! ( write( "{}" ,  tcx. item_name( trait_def_id) ) ) ; 
10731073                    p ! ( "(" ) ; 
@@ -1093,9 +1093,13 @@ pub trait PrettyPrinter<'tcx>: Printer<'tcx> + fmt::Write {
10931093            }  else  { 
10941094                // Otherwise, render this like a regular trait. 
10951095                traits. insert ( 
1096-                     bound_args . map_bound ( |args| ty:: TraitPredicate  { 
1096+                     bound_args_and_self_ty . map_bound ( |( args,  self_ty ) | ty:: TraitPredicate  { 
10971097                        polarity :  ty:: PredicatePolarity :: Positive , 
1098-                         trait_ref :  ty:: TraitRef :: new ( tcx,  trait_def_id,  [ Ty :: new_tup ( tcx,  args) ] ) , 
1098+                         trait_ref :  ty:: TraitRef :: new ( 
1099+                             tcx, 
1100+                             trait_def_id, 
1101+                             [ self_ty,  Ty :: new_tup ( tcx,  args) ] , 
1102+                         ) , 
10991103                    } ) , 
11001104                    FxIndexMap :: default ( ) , 
11011105                ) ; 
@@ -1229,7 +1233,7 @@ pub trait PrettyPrinter<'tcx>: Printer<'tcx> + fmt::Write {
12291233            FxIndexMap < DefId ,  ty:: Binder < ' tcx ,  Term < ' tcx > > > , 
12301234        > , 
12311235        fn_traits :  & mut  FxIndexMap < 
1232-             ( ty:: Binder < ' tcx ,  & ' tcx  ty:: List < Ty < ' tcx > > > ,  bool ) , 
1236+             ( ty:: Binder < ' tcx ,  ( & ' tcx  ty:: List < Ty < ' tcx > > ,   Ty < ' tcx > ) > ,  bool ) , 
12331237            OpaqueFnEntry < ' tcx > , 
12341238        > , 
12351239    )  { 
@@ -1249,7 +1253,7 @@ pub trait PrettyPrinter<'tcx>: Printer<'tcx> + fmt::Write {
12491253            && let  ty:: Tuple ( types)  = * trait_pred. skip_binder ( ) . trait_ref . args . type_at ( 1 ) . kind ( ) 
12501254        { 
12511255            let  entry = fn_traits
1252-                 . entry ( ( trait_pred. rebind ( types) ,  is_async) ) 
1256+                 . entry ( ( trait_pred. rebind ( ( types,  trait_pred . skip_binder ( ) . self_ty ( ) ) ) ,  is_async) ) 
12531257                . or_insert_with ( || OpaqueFnEntry  {  kind,  return_ty :  None  } ) ; 
12541258            if  kind. extends ( entry. kind )  { 
12551259                entry. kind  = kind; 
@@ -2379,7 +2383,7 @@ impl<'tcx> PrettyPrinter<'tcx> for FmtPrinter<'_, 'tcx> {
23792383        f :  C , 
23802384    )  -> Result < ( ) ,  PrintError > 
23812385    where 
2382-         T :  Print < ' tcx ,   Self >  +  TypeFoldable < TyCtxt < ' tcx > > , 
2386+         T :  TypeFoldable < TyCtxt < ' tcx > > , 
23832387    { 
23842388        self . pretty_wrap_binder ( value,  f) 
23852389    } 
@@ -2633,7 +2637,7 @@ impl<'tcx> FmtPrinter<'_, 'tcx> {
26332637        value :  & ty:: Binder < ' tcx ,  T > , 
26342638    )  -> Result < ( T ,  UnordMap < ty:: BoundRegion ,  ty:: Region < ' tcx > > ) ,  fmt:: Error > 
26352639    where 
2636-         T :  Print < ' tcx ,   Self >  +  TypeFoldable < TyCtxt < ' tcx > > , 
2640+         T :  TypeFoldable < TyCtxt < ' tcx > > , 
26372641    { 
26382642        fn  name_by_region_index ( 
26392643            index :  usize , 
@@ -2814,7 +2818,7 @@ impl<'tcx> FmtPrinter<'_, 'tcx> {
28142818        f :  C , 
28152819    )  -> Result < ( ) ,  fmt:: Error > 
28162820    where 
2817-         T :  Print < ' tcx ,   Self >  +  TypeFoldable < TyCtxt < ' tcx > > , 
2821+         T :  TypeFoldable < TyCtxt < ' tcx > > , 
28182822    { 
28192823        let  old_region_index = self . region_index ; 
28202824        let  ( new_value,  _)  = self . name_all_regions ( value) ?; 
0 commit comments