@@ -281,11 +281,6 @@ fn check_gat_where_clauses(tcx: TyCtxt<'_>, associated_items: &[hir::TraitItemRe
281
281
282
282
let mut new_required_bounds: Option < FxHashSet < ty:: Predicate < ' _ > > > = None ;
283
283
for item in associated_items {
284
- if !matches ! ( & item. kind, hir:: AssocItemKind :: Fn { .. } ) {
285
- // FIXME: next commit will add items...
286
- continue ;
287
- }
288
-
289
284
let item_def_id = item. id . def_id ;
290
285
// Skip our own GAT, since it would blow away the required bounds
291
286
if item_def_id == gat_def_id {
@@ -295,28 +290,33 @@ fn check_gat_where_clauses(tcx: TyCtxt<'_>, associated_items: &[hir::TraitItemRe
295
290
let item_hir_id = item. id . hir_id ( ) ;
296
291
let param_env = tcx. param_env ( item_def_id) ;
297
292
298
- // Get the signature using placeholders. In our example, this would
299
- // convert the late-bound 'a into a free region.
300
- let sig = tcx. liberate_late_bound_regions (
301
- item_def_id. to_def_id ( ) ,
302
- tcx. fn_sig ( item_def_id. to_def_id ( ) ) ,
303
- ) ;
304
-
305
- // The types we can assume to be well-formed. In our example, this
306
- // would be &'a mut Self, from the first argument.
307
- let mut wf_tys = FxHashSet :: default ( ) ;
308
- wf_tys. extend ( sig. inputs ( ) ) ;
309
-
310
- // The clauses we that we would require from this function
311
- let item_required_bounds = gather_gat_bounds (
312
- tcx,
313
- param_env,
314
- item_hir_id,
315
- sig. output ( ) ,
316
- & wf_tys,
317
- gat_def_id,
318
- gat_generics,
319
- ) ;
293
+ let item_required_bounds = match item. kind {
294
+ hir:: AssocItemKind :: Fn { .. } => {
295
+ let sig: ty:: FnSig < ' _ > = tcx. liberate_late_bound_regions (
296
+ item_def_id. to_def_id ( ) ,
297
+ tcx. fn_sig ( item_def_id) ,
298
+ ) ;
299
+ gather_gat_bounds (
300
+ tcx,
301
+ param_env,
302
+ item_hir_id,
303
+ sig. output ( ) ,
304
+ & sig. inputs ( ) . iter ( ) . copied ( ) . collect ( ) ,
305
+ gat_def_id,
306
+ gat_generics,
307
+ )
308
+ }
309
+ hir:: AssocItemKind :: Type => gather_gat_bounds (
310
+ tcx,
311
+ param_env,
312
+ item_hir_id,
313
+ tcx. explicit_item_bounds ( item_def_id) . iter ( ) . copied ( ) . collect :: < Vec < _ > > ( ) ,
314
+ & FxHashSet :: default ( ) ,
315
+ gat_def_id,
316
+ gat_generics,
317
+ ) ,
318
+ hir:: AssocItemKind :: Const => None ,
319
+ } ;
320
320
321
321
if let Some ( item_required_bounds) = item_required_bounds {
322
322
// Take the intersection of the new_required_bounds and the item_required_bounds
0 commit comments