@@ -1361,10 +1361,10 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
13611361 lctx. with_remapping ( new_remapping, |lctx| {
13621362 let hir_bounds = lctx. lower_param_bounds ( bounds, itctx) ;
13631363
1364- let lifetime_defs =
1365- lctx . arena . alloc_from_iter ( collected_lifetimes . iter ( ) . map ( |& ( lifetime , _ ) | {
1366- let hir_id = lctx. lower_node_id ( lifetime . id ) ;
1367- debug_assert_ne ! ( lctx. opt_local_def_id( lifetime . id ) , None ) ;
1364+ let lifetime_defs = lctx . arena . alloc_from_iter ( collected_lifetimes . iter ( ) . map (
1365+ |& ( new_node_id , lifetime ) | {
1366+ let hir_id = lctx. lower_node_id ( new_node_id ) ;
1367+ debug_assert_ne ! ( lctx. opt_local_def_id( new_node_id ) , None ) ;
13681368
13691369 let ( name, kind) = if lifetime. ident . name == kw:: UnderscoreLifetime {
13701370 ( hir:: ParamName :: Fresh , hir:: LifetimeParamKind :: Elided )
@@ -1383,7 +1383,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
13831383 kind : hir:: GenericParamKind :: Lifetime { kind } ,
13841384 colon_span : None ,
13851385 }
1386- } ) ) ;
1386+ } ,
1387+ ) ) ;
13871388
13881389 debug ! ( "lower_opaque_impl_trait: lifetime_defs={:#?}" , lifetime_defs) ;
13891390
@@ -1405,7 +1406,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
14051406 } ) ;
14061407
14071408 let lifetimes =
1408- self . arena . alloc_from_iter ( collected_lifetimes. into_iter ( ) . map ( |( lifetime , res ) | {
1409+ self . arena . alloc_from_iter ( collected_lifetimes. into_iter ( ) . map ( |( _ , lifetime ) | {
14091410 let id = self . next_node_id ( ) ;
14101411 let span = lifetime. ident . span ;
14111412
@@ -1415,7 +1416,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
14151416 lifetime. ident
14161417 } ;
14171418
1418- let l = self . new_named_lifetime_with_res ( id, span , ident , res ) ;
1419+ let l = self . new_named_lifetime ( lifetime . id , id , span , ident ) ;
14191420 hir:: GenericArg :: Lifetime ( l)
14201421 } ) ) ;
14211422
@@ -1452,7 +1453,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
14521453 parent_def_id : LocalDefId ,
14531454 lifetimes_in_bounds : & [ Lifetime ] ,
14541455 remapping : & mut FxHashMap < LocalDefId , LocalDefId > ,
1455- ) -> Vec < ( Lifetime , LifetimeRes ) > {
1456+ ) -> Vec < ( NodeId , Lifetime ) > {
14561457 let mut result = Vec :: new ( ) ;
14571458
14581459 for lifetime in lifetimes_in_bounds {
@@ -1471,8 +1472,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
14711472 ) ;
14721473 remapping. insert ( old_def_id, new_def_id) ;
14731474
1474- let new_lifetime = Lifetime { id : node_id, ident : lifetime. ident } ;
1475- result. push ( ( new_lifetime, res) ) ;
1475+ result. push ( ( node_id, * lifetime) ) ;
14761476 }
14771477 }
14781478
@@ -1489,8 +1489,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
14891489 ) ;
14901490 remapping. insert ( old_def_id, new_def_id) ;
14911491
1492- let new_lifetime = Lifetime { id : node_id, ident : lifetime. ident } ;
1493- result. push ( ( new_lifetime, res) ) ;
1492+ result. push ( ( node_id, * lifetime) ) ;
14941493 }
14951494 }
14961495
@@ -1732,8 +1731,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
17321731 }
17331732 } ;
17341733
1735- let new_lifetime = Lifetime { id : inner_node_id , ident } ;
1736- captures. push ( ( new_lifetime , inner_res) ) ;
1734+ let lifetime = Lifetime { id : outer_node_id , ident } ;
1735+ captures. push ( ( inner_node_id , lifetime , Some ( inner_res) ) ) ;
17371736 }
17381737
17391738 debug ! ( ?captures) ;
@@ -1743,11 +1742,15 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
17431742 lifetime_collector:: lifetimes_in_ret_ty ( & this. resolver , output) ;
17441743 debug ! ( ?lifetimes_in_bounds) ;
17451744
1746- captures. extend ( this. create_lifetime_defs (
1747- opaque_ty_def_id,
1748- & lifetimes_in_bounds,
1749- & mut new_remapping,
1750- ) ) ;
1745+ captures. extend (
1746+ this. create_lifetime_defs (
1747+ opaque_ty_def_id,
1748+ & lifetimes_in_bounds,
1749+ & mut new_remapping,
1750+ )
1751+ . into_iter ( )
1752+ . map ( |( new_node_id, lifetime) | ( new_node_id, lifetime, None ) ) ,
1753+ ) ;
17511754
17521755 this. with_remapping ( new_remapping, |this| {
17531756 // We have to be careful to get elision right here. The
@@ -1761,10 +1764,10 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
17611764 let future_bound =
17621765 this. lower_async_fn_output_type_to_future_bound ( output, fn_def_id, span) ;
17631766
1764- let generic_params =
1765- this . arena . alloc_from_iter ( captures . iter ( ) . map ( |& ( lifetime, _) | {
1766- let hir_id = this. lower_node_id ( lifetime . id ) ;
1767- debug_assert_ne ! ( this. opt_local_def_id( lifetime . id ) , None ) ;
1767+ let generic_params = this . arena . alloc_from_iter ( captures . iter ( ) . map (
1768+ |& ( new_node_id , lifetime, _) | {
1769+ let hir_id = this. lower_node_id ( new_node_id ) ;
1770+ debug_assert_ne ! ( this. opt_local_def_id( new_node_id ) , None ) ;
17681771
17691772 let ( name, kind) = if lifetime. ident . name == kw:: UnderscoreLifetime {
17701773 ( hir:: ParamName :: Fresh , hir:: LifetimeParamKind :: Elided )
@@ -1783,7 +1786,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
17831786 kind : hir:: GenericParamKind :: Lifetime { kind } ,
17841787 colon_span : None ,
17851788 }
1786- } ) ) ;
1789+ } ,
1790+ ) ) ;
17871791 debug ! ( "lower_async_fn_ret_ty: generic_params={:#?}" , generic_params) ;
17881792
17891793 let opaque_ty_item = hir:: OpaqueTy {
@@ -1819,7 +1823,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
18191823 // For the "output" lifetime parameters, we just want to
18201824 // generate `'_`.
18211825 let generic_args =
1822- self . arena . alloc_from_iter ( captures. into_iter ( ) . map ( |( lifetime, res) | {
1826+ self . arena . alloc_from_iter ( captures. into_iter ( ) . map ( |( _ , lifetime, res) | {
18231827 let id = self . next_node_id ( ) ;
18241828 let span = lifetime. ident . span ;
18251829
@@ -1829,6 +1833,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
18291833 lifetime. ident
18301834 } ;
18311835
1836+ let res = res. unwrap_or (
1837+ self . resolver . get_lifetime_res ( lifetime. id ) . unwrap_or ( LifetimeRes :: Error ) ,
1838+ ) ;
18321839 let l = self . new_named_lifetime_with_res ( id, span, ident, res) ;
18331840 hir:: GenericArg :: Lifetime ( l)
18341841 } ) ) ;
@@ -1901,8 +1908,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
19011908 fn lower_lifetime ( & mut self , l : & Lifetime ) -> hir:: Lifetime {
19021909 let span = self . lower_span ( l. ident . span ) ;
19031910 let ident = self . lower_ident ( l. ident ) ;
1904- let res = self . resolver . get_lifetime_res ( l. id ) . unwrap_or ( LifetimeRes :: Error ) ;
1905- self . new_named_lifetime_with_res ( l. id , span, ident, res)
1911+ self . new_named_lifetime ( l. id , l. id , span, ident)
19061912 }
19071913
19081914 #[ tracing:: instrument( level = "debug" , skip( self ) ) ]
@@ -1936,6 +1942,18 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
19361942 hir:: Lifetime { hir_id : self . lower_node_id ( id) , span : self . lower_span ( span) , name }
19371943 }
19381944
1945+ #[ tracing:: instrument( level = "debug" , skip( self ) ) ]
1946+ fn new_named_lifetime (
1947+ & mut self ,
1948+ id : NodeId ,
1949+ new_id : NodeId ,
1950+ span : Span ,
1951+ ident : Ident ,
1952+ ) -> hir:: Lifetime {
1953+ let res = self . resolver . get_lifetime_res ( id) . unwrap_or ( LifetimeRes :: Error ) ;
1954+ self . new_named_lifetime_with_res ( new_id, span, ident, res)
1955+ }
1956+
19391957 fn lower_generic_params_mut < ' s > (
19401958 & ' s mut self ,
19411959 params : & ' s [ GenericParam ] ,
0 commit comments