@@ -540,9 +540,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
540
540
541
541
/// Get the previously recorded `to` local def id given the `from` local def id, obtained using
542
542
/// `generics_def_id_map` field.
543
- fn get_remapped_def_id ( & self , mut local_def_id : LocalDefId ) -> LocalDefId {
543
+ fn get_remapped_def_id ( & self , local_def_id : LocalDefId ) -> LocalDefId {
544
544
// `generics_def_id_map` is a stack of mappings. As we go deeper in impl traits nesting we
545
- // push new mappings so we need to try first the latest mappings, hence `iter().rev()`.
545
+ // push new mappings, so we first need to get the latest (innermost) mappings, hence `iter().rev()`.
546
546
//
547
547
// Consider:
548
548
//
@@ -552,18 +552,13 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
552
552
//
553
553
// `[[fn#'b -> impl_trait#'b], [fn#'b -> impl_sized#'b]]`
554
554
//
555
- // for the opaque type generated on `impl Sized + 'b`, We want the result to be:
556
- // impl_sized#'b, so iterating forward is the wrong thing to do.
557
- for map in self . generics_def_id_map . iter ( ) . rev ( ) {
558
- if let Some ( r) = map. get ( & local_def_id) {
559
- debug ! ( "def_id_remapper: remapping from `{local_def_id:?}` to `{r:?}`" ) ;
560
- local_def_id = * r;
561
- } else {
562
- debug ! ( "def_id_remapper: no remapping for `{local_def_id:?}` found in map" ) ;
563
- }
564
- }
565
-
566
- local_def_id
555
+ // for the opaque type generated on `impl Sized + 'b`, we want the result to be: impl_sized#'b.
556
+ // So, if we were trying to find first from the start (outermost) would give the wrong result, impl_trait#'b.
557
+ self . generics_def_id_map
558
+ . iter ( )
559
+ . rev ( )
560
+ . find_map ( |map| map. get ( & local_def_id) . map ( |local_def_id| * local_def_id) )
561
+ . unwrap_or ( local_def_id)
567
562
}
568
563
569
564
/// Freshen the `LoweringContext` and ready it to lower a nested item.
@@ -1641,7 +1636,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1641
1636
1642
1637
LifetimeRes :: Fresh { param, binder : _ } => {
1643
1638
debug_assert_eq ! ( lifetime. ident. name, kw:: UnderscoreLifetime ) ;
1644
- if let Some ( old_def_id) = self . opt_local_def_id ( param) && remapping. get ( & old_def_id) . is_none ( ) {
1639
+ if let Some ( old_def_id) = self . orig_opt_local_def_id ( param) && remapping. get ( & old_def_id) . is_none ( ) {
1645
1640
let node_id = self . next_node_id ( ) ;
1646
1641
1647
1642
let new_def_id = self . create_def (
@@ -1886,7 +1881,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1886
1881
let extra_lifetime_params = self . resolver . take_extra_lifetime_params ( opaque_ty_node_id) ;
1887
1882
debug ! ( ?extra_lifetime_params) ;
1888
1883
for ( ident, outer_node_id, outer_res) in extra_lifetime_params {
1889
- let outer_def_id = self . local_def_id ( outer_node_id) ;
1884
+ let outer_def_id = self . orig_local_def_id ( outer_node_id) ;
1890
1885
let inner_node_id = self . next_node_id ( ) ;
1891
1886
1892
1887
// Add a definition for the in scope lifetime def.
0 commit comments