• B
    Auto merge of #114602 - compiler-errors:rpit-outlives-sadness, r=oli-obk · bf62436b
    bors 提交于
    Map RPIT duplicated lifetimes back to fn captured lifetimes
    
    Use the [`lifetime_mapping`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/hir/struct.OpaqueTy.html#structfield.lifetime_mapping) to map an RPIT's captured lifetimes back to the early- or late-bound lifetimes from its parent function. We may be going thru several layers of mapping, since opaques can be nested, so we introduce `TyCtxt::map_rpit_lifetime_to_fn_lifetime` to loop through several opaques worth of mapping, and handle turning it into a `ty::Region` as well.
    
    We can then use this instead of the identity substs for RPITs in `check_opaque_meets_bounds` to address #114285.
    
    We can then also use `map_rpit_lifetime_to_fn_lifetime` to properly install bidirectional-outlives predicates for both RPITs and RPITITs. This addresses #114601.
    
    I based this on #114574, but I don't actually know how much of that PR we still need, so some code may be redundant now... 🤷
    
    ---
    
    Fixes #114597
    Fixes #114579
    Fixes #114285
    
    Also fixes #114601, since it turns out we had other bugs with RPITITs and their duplicated lifetime params 😅.
    
    Supersedes #114574
    
    r? `@oli-obk`
    bf62436b
check.rs 63.7 KB