@@ -804,6 +804,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
804804 ident : Ident ,
805805 node_id : NodeId ,
806806 res : LifetimeRes ,
807+ source : hir:: GenericParamSource ,
807808 ) -> Option < hir:: GenericParam < ' hir > > {
808809 let ( name, kind) = match res {
809810 LifetimeRes :: Param { .. } => {
@@ -837,6 +838,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
837838 pure_wrt_drop : false ,
838839 kind : hir:: GenericParamKind :: Lifetime { kind } ,
839840 colon_span : None ,
841+ source,
840842 } )
841843 }
842844
@@ -852,11 +854,13 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
852854 binder : NodeId ,
853855 generic_params : & [ GenericParam ] ,
854856 ) -> & ' hir [ hir:: GenericParam < ' hir > ] {
855- let mut generic_params: Vec < _ > = self . lower_generic_params_mut ( generic_params) . collect ( ) ;
857+ let mut generic_params: Vec < _ > = self
858+ . lower_generic_params_mut ( generic_params, hir:: GenericParamSource :: Binder )
859+ . collect ( ) ;
856860 let extra_lifetimes = self . resolver . take_extra_lifetime_params ( binder) ;
857861 debug ! ( ?extra_lifetimes) ;
858862 generic_params. extend ( extra_lifetimes. into_iter ( ) . filter_map ( |( ident, node_id, res) | {
859- self . lifetime_res_to_generic_param ( ident, node_id, res)
863+ self . lifetime_res_to_generic_param ( ident, node_id, res, hir :: GenericParamSource :: Binder )
860864 } ) ) ;
861865 let generic_params = self . arena . alloc_from_iter ( generic_params) ;
862866 debug ! ( ?generic_params) ;
@@ -1375,8 +1379,12 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
13751379 span,
13761380 ) ;
13771381 let ident = Ident :: from_str_and_span ( & pprust:: ty_to_string ( t) , span) ;
1378- let ( param, bounds, path) =
1379- self . lower_generic_and_bounds ( * def_node_id, span, ident, bounds) ;
1382+ let ( param, bounds, path) = self . lower_universal_param_and_bounds (
1383+ * def_node_id,
1384+ span,
1385+ ident,
1386+ bounds,
1387+ ) ;
13801388 self . impl_trait_defs . push ( param) ;
13811389 if let Some ( bounds) = bounds {
13821390 self . impl_trait_bounds . push ( bounds) ;
@@ -1530,6 +1538,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
15301538 pure_wrt_drop : false ,
15311539 kind : hir:: GenericParamKind :: Lifetime { kind } ,
15321540 colon_span : None ,
1541+ source : hir:: GenericParamSource :: Generics ,
15331542 }
15341543 } ,
15351544 ) ) ;
@@ -1987,6 +1996,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
19871996 pure_wrt_drop : false ,
19881997 kind : hir:: GenericParamKind :: Lifetime { kind } ,
19891998 colon_span : None ,
1999+ source : hir:: GenericParamSource :: Generics ,
19902000 }
19912001 } ,
19922002 ) ) ;
@@ -2152,16 +2162,25 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
21522162 fn lower_generic_params_mut < ' s > (
21532163 & ' s mut self ,
21542164 params : & ' s [ GenericParam ] ,
2165+ source : hir:: GenericParamSource ,
21552166 ) -> impl Iterator < Item = hir:: GenericParam < ' hir > > + Captures < ' a > + Captures < ' s > {
2156- params. iter ( ) . map ( move |param| self . lower_generic_param ( param) )
2167+ params. iter ( ) . map ( move |param| self . lower_generic_param ( param, source ) )
21572168 }
21582169
2159- fn lower_generic_params ( & mut self , params : & [ GenericParam ] ) -> & ' hir [ hir:: GenericParam < ' hir > ] {
2160- self . arena . alloc_from_iter ( self . lower_generic_params_mut ( params) )
2170+ fn lower_generic_params (
2171+ & mut self ,
2172+ params : & [ GenericParam ] ,
2173+ source : hir:: GenericParamSource ,
2174+ ) -> & ' hir [ hir:: GenericParam < ' hir > ] {
2175+ self . arena . alloc_from_iter ( self . lower_generic_params_mut ( params, source) )
21612176 }
21622177
21632178 #[ instrument( level = "trace" , skip( self ) ) ]
2164- fn lower_generic_param ( & mut self , param : & GenericParam ) -> hir:: GenericParam < ' hir > {
2179+ fn lower_generic_param (
2180+ & mut self ,
2181+ param : & GenericParam ,
2182+ source : hir:: GenericParamSource ,
2183+ ) -> hir:: GenericParam < ' hir > {
21652184 let ( name, kind) = self . lower_generic_param_kind ( param) ;
21662185
21672186 let hir_id = self . lower_node_id ( param. id ) ;
@@ -2174,6 +2193,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
21742193 pure_wrt_drop : self . tcx . sess . contains_name ( & param. attrs , sym:: may_dangle) ,
21752194 kind,
21762195 colon_span : param. colon_span . map ( |s| self . lower_span ( s) ) ,
2196+ source,
21772197 }
21782198 }
21792199
@@ -2266,7 +2286,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
22662286 }
22672287
22682288 #[ instrument( level = "debug" , skip( self ) , ret) ]
2269- fn lower_generic_and_bounds (
2289+ fn lower_universal_param_and_bounds (
22702290 & mut self ,
22712291 node_id : NodeId ,
22722292 span : Span ,
@@ -2286,6 +2306,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
22862306 span,
22872307 kind : hir:: GenericParamKind :: Type { default : None , synthetic : true } ,
22882308 colon_span : None ,
2309+ source : hir:: GenericParamSource :: Generics ,
22892310 } ;
22902311
22912312 let preds = self . lower_generic_bound_predicate (
0 commit comments