@@ -804,6 +804,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
804
804
ident : Ident ,
805
805
node_id : NodeId ,
806
806
res : LifetimeRes ,
807
+ source : hir:: GenericParamSource ,
807
808
) -> Option < hir:: GenericParam < ' hir > > {
808
809
let ( name, kind) = match res {
809
810
LifetimeRes :: Param { .. } => {
@@ -837,6 +838,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
837
838
pure_wrt_drop : false ,
838
839
kind : hir:: GenericParamKind :: Lifetime { kind } ,
839
840
colon_span : None ,
841
+ source,
840
842
} )
841
843
}
842
844
@@ -852,11 +854,13 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
852
854
binder : NodeId ,
853
855
generic_params : & [ GenericParam ] ,
854
856
) -> & ' 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 ( ) ;
856
860
let extra_lifetimes = self . resolver . take_extra_lifetime_params ( binder) ;
857
861
debug ! ( ?extra_lifetimes) ;
858
862
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 )
860
864
} ) ) ;
861
865
let generic_params = self . arena . alloc_from_iter ( generic_params) ;
862
866
debug ! ( ?generic_params) ;
@@ -1375,8 +1379,12 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1375
1379
span,
1376
1380
) ;
1377
1381
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
+ ) ;
1380
1388
self . impl_trait_defs . push ( param) ;
1381
1389
if let Some ( bounds) = bounds {
1382
1390
self . impl_trait_bounds . push ( bounds) ;
@@ -1530,6 +1538,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1530
1538
pure_wrt_drop : false ,
1531
1539
kind : hir:: GenericParamKind :: Lifetime { kind } ,
1532
1540
colon_span : None ,
1541
+ source : hir:: GenericParamSource :: Generics ,
1533
1542
}
1534
1543
} ,
1535
1544
) ) ;
@@ -1987,6 +1996,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1987
1996
pure_wrt_drop : false ,
1988
1997
kind : hir:: GenericParamKind :: Lifetime { kind } ,
1989
1998
colon_span : None ,
1999
+ source : hir:: GenericParamSource :: Generics ,
1990
2000
}
1991
2001
} ,
1992
2002
) ) ;
@@ -2152,16 +2162,25 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2152
2162
fn lower_generic_params_mut < ' s > (
2153
2163
& ' s mut self ,
2154
2164
params : & ' s [ GenericParam ] ,
2165
+ source : hir:: GenericParamSource ,
2155
2166
) -> 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 ) )
2157
2168
}
2158
2169
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) )
2161
2176
}
2162
2177
2163
2178
#[ 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 > {
2165
2184
let ( name, kind) = self . lower_generic_param_kind ( param) ;
2166
2185
2167
2186
let hir_id = self . lower_node_id ( param. id ) ;
@@ -2174,6 +2193,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2174
2193
pure_wrt_drop : self . tcx . sess . contains_name ( & param. attrs , sym:: may_dangle) ,
2175
2194
kind,
2176
2195
colon_span : param. colon_span . map ( |s| self . lower_span ( s) ) ,
2196
+ source,
2177
2197
}
2178
2198
}
2179
2199
@@ -2266,7 +2286,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2266
2286
}
2267
2287
2268
2288
#[ instrument( level = "debug" , skip( self ) , ret) ]
2269
- fn lower_generic_and_bounds (
2289
+ fn lower_universal_param_and_bounds (
2270
2290
& mut self ,
2271
2291
node_id : NodeId ,
2272
2292
span : Span ,
@@ -2286,6 +2306,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2286
2306
span,
2287
2307
kind : hir:: GenericParamKind :: Type { default : None , synthetic : true } ,
2288
2308
colon_span : None ,
2309
+ source : hir:: GenericParamSource :: Generics ,
2289
2310
} ;
2290
2311
2291
2312
let preds = self . lower_generic_bound_predicate (
0 commit comments