@@ -277,7 +277,6 @@ impl<'a, 'gcx> CheckTypeWellFormedVisitor<'a, 'gcx> {
277
277
278
278
fn check_trait ( & mut self , item : & hir:: Item ) {
279
279
let trait_def_id = self . tcx . hir . local_def_id ( item. id ) ;
280
-
281
280
self . for_item ( item) . with_fcx ( |fcx, _| {
282
281
self . check_trait_where_clauses ( fcx, item. span , trait_def_id) ;
283
282
vec ! [ ]
@@ -421,14 +420,13 @@ impl<'a, 'gcx> CheckTypeWellFormedVisitor<'a, 'gcx> {
421
420
if skip { continue ; }
422
421
substituted_predicates. push ( match pred {
423
422
// In trait predicates, substitute defaults only for the LHS.
424
- ty:: Predicate :: Trait ( trait_pred) => {
425
- let t_pred = trait_pred. skip_binder ( ) ;
426
- let self_ty = t_pred. self_ty ( ) . subst ( fcx. tcx , substs) ;
427
- let mut trait_substs = t_pred. trait_ref . substs . to_vec ( ) ;
428
- trait_substs[ 0 ] = self_ty. into ( ) ;
429
- let trait_ref = ty:: TraitRef :: new ( t_pred. def_id ( ) ,
430
- fcx. tcx . intern_substs ( & trait_substs) ) ;
431
- ty:: Predicate :: Trait ( ty:: Binder ( trait_ref) . to_poly_trait_predicate ( ) )
423
+ ty:: Predicate :: Trait ( t_pred) => {
424
+ let trait_ref = t_pred. map_bound ( |t_pred| {
425
+ let mut trait_subs = t_pred. trait_ref . substs . to_vec ( ) ;
426
+ trait_subs[ 0 ] = t_pred. self_ty ( ) . subst ( fcx. tcx , substs) . into ( ) ;
427
+ ty:: TraitRef :: new ( t_pred. def_id ( ) , fcx. tcx . intern_substs ( & trait_subs) )
428
+ } ) ;
429
+ ty:: Predicate :: Trait ( trait_ref. to_poly_trait_predicate ( ) )
432
430
}
433
431
_ => pred. subst ( fcx. tcx , substs)
434
432
} ) ;
0 commit comments