@@ -34,7 +34,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
3434 ty : Ty < ' tcx > ,
3535 trait_def_id : DefId ,
3636 param_env : ty:: ParamEnv < ' tcx > ,
37- param_env_def_id : DefId ,
37+ item_def_id : DefId ,
3838 f : & auto_trait:: AutoTraitFinder < ' tcx > ,
3939 // If this is set, show only negative trait implementations, not positive ones.
4040 discard_positive_impl : bool ,
@@ -50,7 +50,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
5050 let region_data = info. region_data ;
5151
5252 let names_map = tcx
53- . generics_of ( param_env_def_id )
53+ . generics_of ( item_def_id )
5454 . params
5555 . iter ( )
5656 . filter_map ( |param| match param. kind {
@@ -62,16 +62,16 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
6262 let lifetime_predicates = Self :: handle_lifetimes ( & region_data, & names_map) ;
6363 let new_generics = self . param_env_to_generics (
6464 infcx. tcx ,
65- param_env_def_id ,
65+ item_def_id ,
6666 info. full_user_env ,
6767 lifetime_predicates,
6868 info. vid_to_region ,
6969 ) ;
7070
7171 debug ! (
72- "find_auto_trait_generics(param_env_def_id ={:?}, trait_def_id={:?}): \
72+ "find_auto_trait_generics(item_def_id ={:?}, trait_def_id={:?}): \
7373 finished with {:?}",
74- param_env_def_id , trait_def_id, new_generics
74+ item_def_id , trait_def_id, new_generics
7575 ) ;
7676
7777 new_generics
@@ -101,7 +101,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
101101 // Instead, we generate `impl !Send for Foo<T>`, which better
102102 // expresses the fact that `Foo<T>` never implements `Send`,
103103 // regardless of the choice of `T`.
104- let params = ( tcx. generics_of ( param_env_def_id ) , ty:: GenericPredicates :: default ( ) )
104+ let params = ( tcx. generics_of ( item_def_id ) , ty:: GenericPredicates :: default ( ) )
105105 . clean ( self . cx )
106106 . params ;
107107
@@ -115,7 +115,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
115115 name : None ,
116116 attrs : Default :: default ( ) ,
117117 visibility : Inherited ,
118- def_id : self . cx . next_def_id ( param_env_def_id . krate ) ,
118+ def_id : self . cx . next_def_id ( item_def_id . krate ) ,
119119 kind : box ImplItem ( Impl {
120120 unsafety : hir:: Unsafety :: Normal ,
121121 generics : new_generics,
@@ -130,26 +130,25 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
130130 } )
131131 }
132132
133- // FIXME(eddyb) figure out a better way to pass information about
134- // parametrization of `ty` than `param_env_def_id`.
135- crate fn get_auto_trait_impls ( & mut self , ty : Ty < ' tcx > , param_env_def_id : DefId ) -> Vec < Item > {
133+ crate fn get_auto_trait_impls ( & mut self , item_def_id : DefId ) -> Vec < Item > {
136134 let tcx = self . cx . tcx ;
137- let param_env = tcx. param_env ( param_env_def_id) ;
138- let f = auto_trait:: AutoTraitFinder :: new ( self . cx . tcx ) ;
135+ let param_env = tcx. param_env ( item_def_id) ;
136+ let ty = tcx. type_of ( item_def_id) ;
137+ let f = auto_trait:: AutoTraitFinder :: new ( tcx) ;
139138
140139 debug ! ( "get_auto_trait_impls({:?})" , ty) ;
141140 let auto_traits: Vec < _ > = self . cx . auto_traits . iter ( ) . cloned ( ) . collect ( ) ;
142141 let mut auto_traits: Vec < Item > = auto_traits
143142 . into_iter ( )
144143 . filter_map ( |trait_def_id| {
145- self . generate_for_trait ( ty, trait_def_id, param_env, param_env_def_id , & f, false )
144+ self . generate_for_trait ( ty, trait_def_id, param_env, item_def_id , & f, false )
146145 } )
147146 . collect ( ) ;
148147 // We are only interested in case the type *doesn't* implement the Sized trait.
149- if !ty. is_sized ( self . cx . tcx . at ( rustc_span:: DUMMY_SP ) , param_env) {
148+ if !ty. is_sized ( tcx. at ( rustc_span:: DUMMY_SP ) , param_env) {
150149 // In case `#![no_core]` is used, `sized_trait` returns nothing.
151- if let Some ( item) = self . cx . tcx . lang_items ( ) . sized_trait ( ) . and_then ( |sized_trait_did| {
152- self . generate_for_trait ( ty, sized_trait_did, param_env, param_env_def_id , & f, true )
150+ if let Some ( item) = tcx. lang_items ( ) . sized_trait ( ) . and_then ( |sized_trait_did| {
151+ self . generate_for_trait ( ty, sized_trait_did, param_env, item_def_id , & f, true )
153152 } ) {
154153 auto_traits. push ( item) ;
155154 }
@@ -445,15 +444,15 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
445444 fn param_env_to_generics (
446445 & mut self ,
447446 tcx : TyCtxt < ' tcx > ,
448- param_env_def_id : DefId ,
447+ item_def_id : DefId ,
449448 param_env : ty:: ParamEnv < ' tcx > ,
450449 mut existing_predicates : Vec < WherePredicate > ,
451450 vid_to_region : FxHashMap < ty:: RegionVid , ty:: Region < ' tcx > > ,
452451 ) -> Generics {
453452 debug ! (
454- "param_env_to_generics(param_env_def_id ={:?}, param_env={:?}, \
453+ "param_env_to_generics(item_def_id ={:?}, param_env={:?}, \
455454 existing_predicates={:?})",
456- param_env_def_id , param_env, existing_predicates
455+ item_def_id , param_env, existing_predicates
457456 ) ;
458457
459458 // The `Sized` trait must be handled specially, since we only display it when
@@ -463,7 +462,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
463462 let mut replacer = RegionReplacer { vid_to_region : & vid_to_region, tcx } ;
464463
465464 let orig_bounds: FxHashSet < _ > =
466- self . cx . tcx . param_env ( param_env_def_id ) . caller_bounds ( ) . iter ( ) . collect ( ) ;
465+ self . cx . tcx . param_env ( item_def_id ) . caller_bounds ( ) . iter ( ) . collect ( ) ;
467466 let clean_where_predicates = param_env
468467 . caller_bounds ( )
469468 . iter ( )
@@ -477,14 +476,11 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
477476 . map ( |p| p. fold_with ( & mut replacer) ) ;
478477
479478 let mut generic_params =
480- ( tcx. generics_of ( param_env_def_id ) , tcx. explicit_predicates_of ( param_env_def_id ) )
479+ ( tcx. generics_of ( item_def_id ) , tcx. explicit_predicates_of ( item_def_id ) )
481480 . clean ( self . cx )
482481 . params ;
483482
484- debug ! (
485- "param_env_to_generics({:?}): generic_params={:?}" ,
486- param_env_def_id, generic_params
487- ) ;
483+ debug ! ( "param_env_to_generics({:?}): generic_params={:?}" , item_def_id, generic_params) ;
488484
489485 let mut has_sized = FxHashSet :: default ( ) ;
490486 let mut ty_to_bounds: FxHashMap < _ , FxHashSet < _ > > = Default :: default ( ) ;
@@ -648,13 +644,10 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
648644 . or_default ( )
649645 . insert ( * trait_. clone ( ) ) ;
650646 }
651- _ => panic ! (
652- "Unexpected trait {:?} for {:?}" ,
653- trait_, param_env_def_id,
654- ) ,
647+ _ => panic ! ( "Unexpected trait {:?} for {:?}" , trait_, item_def_id) ,
655648 }
656649 }
657- _ => panic ! ( "Unexpected LHS {:?} for {:?}" , lhs, param_env_def_id ) ,
650+ _ => panic ! ( "Unexpected LHS {:?} for {:?}" , lhs, item_def_id ) ,
658651 }
659652 }
660653 } ;
0 commit comments