@@ -30,53 +30,55 @@ fn associated_type_bounds<'tcx>(
3030    span :  Span , 
3131    filter :  PredicateFilter , 
3232)  -> & ' tcx  [ ( ty:: Clause < ' tcx > ,  Span ) ]  { 
33-     let  item_ty = Ty :: new_projection_from_args ( 
34-         tcx, 
35-         assoc_item_def_id. to_def_id ( ) , 
36-         GenericArgs :: identity_for_item ( tcx,  assoc_item_def_id) , 
37-     ) ; 
38- 
39-     let  icx = ItemCtxt :: new ( tcx,  assoc_item_def_id) ; 
40-     let  mut  bounds = Bounds :: default ( ) ; 
41-     icx. lowerer ( ) . lower_bounds ( item_ty,  hir_bounds,  & mut  bounds,  ty:: List :: empty ( ) ,  filter) ; 
42-     // Associated types are implicitly sized unless a `?Sized` bound is found 
43-     match  filter { 
44-         PredicateFilter :: All 
45-         | PredicateFilter :: SelfOnly 
46-         | PredicateFilter :: SelfTraitThatDefines ( _) 
47-         | PredicateFilter :: SelfAndAssociatedTypeBounds  => { 
48-             icx. lowerer ( ) . add_sized_bound ( & mut  bounds,  item_ty,  hir_bounds,  None ,  span) ; 
33+     ty:: print:: with_reduced_queries!( { 
34+         let  item_ty = Ty :: new_projection_from_args( 
35+             tcx, 
36+             assoc_item_def_id. to_def_id( ) , 
37+             GenericArgs :: identity_for_item( tcx,  assoc_item_def_id) , 
38+         ) ; 
39+ 
40+         let  icx = ItemCtxt :: new( tcx,  assoc_item_def_id) ; 
41+         let  mut  bounds = Bounds :: default ( ) ; 
42+         icx. lowerer( ) . lower_bounds( item_ty,  hir_bounds,  & mut  bounds,  ty:: List :: empty( ) ,  filter) ; 
43+         // Associated types are implicitly sized unless a `?Sized` bound is found 
44+         match  filter { 
45+             PredicateFilter :: All 
46+             | PredicateFilter :: SelfOnly 
47+             | PredicateFilter :: SelfTraitThatDefines ( _) 
48+             | PredicateFilter :: SelfAndAssociatedTypeBounds  => { 
49+                 icx. lowerer( ) . add_sized_bound( & mut  bounds,  item_ty,  hir_bounds,  None ,  span) ; 
50+             } 
51+             // `ConstIfConst` is only interested in `~const` bounds. 
52+             PredicateFilter :: ConstIfConst  | PredicateFilter :: SelfConstIfConst  => { } 
4953        } 
50-         // `ConstIfConst` is only interested in `~const` bounds. 
51-         PredicateFilter :: ConstIfConst  | PredicateFilter :: SelfConstIfConst  => { } 
52-     } 
5354
54-     let  trait_def_id = tcx. local_parent ( assoc_item_def_id) ; 
55-     let  trait_predicates = tcx. trait_explicit_predicates_and_bounds ( trait_def_id) ; 
56- 
57-     let  item_trait_ref = ty:: TraitRef :: identity ( tcx,  tcx. parent ( assoc_item_def_id. to_def_id ( ) ) ) ; 
58-     let  bounds_from_parent =
59-         trait_predicates. predicates . iter ( ) . copied ( ) . filter_map ( |( clause,  span) | { 
60-             remap_gat_vars_and_recurse_into_nested_projections ( 
61-                 tcx, 
62-                 filter, 
63-                 item_trait_ref, 
64-                 assoc_item_def_id, 
65-                 span, 
66-                 clause, 
67-             ) 
68-         } ) ; 
69- 
70-     let  all_bounds = tcx. arena . alloc_from_iter ( bounds. clauses ( ) . chain ( bounds_from_parent) ) ; 
71-     debug ! ( 
72-         "associated_type_bounds({}) = {:?}" , 
73-         tcx. def_path_str( assoc_item_def_id. to_def_id( ) ) , 
74-         all_bounds
75-     ) ; 
55+          let  trait_def_id = tcx. local_parent( assoc_item_def_id) ; 
56+          let  trait_predicates = tcx. trait_explicit_predicates_and_bounds( trait_def_id) ; 
57+ 
58+          let  item_trait_ref = ty:: TraitRef :: identity( tcx,  tcx. parent( assoc_item_def_id. to_def_id( ) ) ) ; 
59+          let  bounds_from_parent =
60+              trait_predicates. predicates. iter( ) . copied( ) . filter_map( |( clause,  span) | { 
61+                  remap_gat_vars_and_recurse_into_nested_projections( 
62+                      tcx, 
63+                      filter, 
64+                      item_trait_ref, 
65+                      assoc_item_def_id, 
66+                      span, 
67+                      clause, 
68+                  ) 
69+              } ) ; 
70+ 
71+          let  all_bounds = tcx. arena. alloc_from_iter( bounds. clauses( ) . chain( bounds_from_parent) ) ; 
72+          debug!( 
73+              "associated_type_bounds({}) = {:?}" , 
74+              tcx. def_path_str( assoc_item_def_id. to_def_id( ) ) , 
75+              all_bounds
76+          ) ; 
7677
77-     assert_only_contains_predicates_from ( filter,  all_bounds,  item_ty) ; 
78+          assert_only_contains_predicates_from( filter,  all_bounds,  item_ty) ; 
7879
79-     all_bounds
80+         all_bounds
81+     } ) 
8082} 
8183
8284/// The code below is quite involved, so let me explain. 
0 commit comments