-
Notifications
You must be signed in to change notification settings - Fork 385
Commit 430ee2c
committed
Auto merge of #113704 - compiler-errors:rpitit-assumed-wf-inherit, r=spastorino
Make RPITITs inherit the `assumed_wf_types` of their parent method
... and then move the RPITIT well-formedness check to just use the regular logic of wfchecking an associated type.
---
We need to inherit the `assumed_wf_types` of the RPITIT's parent function in order for the given code to be considered well-formed:
```rust
trait Foo {
fn bar<'a, T>(_: &'a T) -> impl Iterator<Output = &'a T>;
}
```
Since for `&'a T` to be WF, we need `T: 'a`.
In order for this to work for late-bound lifetimes, we need to do some additional mapping of any late-bound lifetimes captured by these assumed wf types. This is because within the body of the function (and thus in the `assumed_wf_types`), they're represented as `ReFree` variants of the original late-bound lifetimes declared in the function's generics, but in the RPITIT's GAT, they're represented as "reified" `ReEarlyBound` vars (duplicated during opaque type lowering). Luckily, the mapping between these two is already [stored in the opaque](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/hir/struct.OpaqueTy.html#structfield.lifetime_mapping).
Fixes #113796File tree
0 file changed
+0
-0
lines changedFilter options
0 file changed
+0
-0
lines changed
0 commit comments