Auto merge of #112682 - spastorino:new-rpitit-21, r=compiler-errors
Add bidirectional where clauses on RPITIT synthesized GATs
Given the following:
```rust
struct MyStruct<'a, T>(&'a T);
trait MyTrait<'a, T> {
fn my_fn<'b, 'c, 'd, V>(item: &'c String) -> impl Sized + 'a + 'b + 'c where V: 'b, V: 'd;
}
impl<'a, T> MyTrait<'a, T> for MyStruct<'a, T> {
fn my_fn<'b, 'c, 'd, V>(_: &'c String) -> impl Sized + 'a + 'b + 'c
where
V: 'b,
V: 'd,
{
unimplemented!();
}
}
```
We need the desugaring to be:
```rust
trait MyTrait<'a, T> {
type MyFn<'bf, 'df, Vf, 'a2, 'b2, 'c2>: Sized + 'a2 + 'b2 + 'c2 where Vf: 'b2, 'a2: 'a, 'a: 'a2, 'b2: 'bf, 'bf: 'b2;
fn my_fn<'b, 'c, 'd, V>(item: &'c String) -> MyStruct<'a>::MyFn<'b, 'd, V, 'a, 'b, 'c> where V: 'b, V: 'd {
type opaque<'a3, 'b3, 'c3>;
};
}
impl<'a, T> MyIter<'a, T> for MyStruct<'a, T> {
type MyFn<'bf, 'df, Vf, 'a2, 'b2, 'c2> = impl Sized + 'a2 + 'b2 + 'c2 where Vf: b2, 'a2: 'a, 'a: 'a2, 'b2: 'bf, 'bf: 'b2;
fn my_fn<'b, 'c, 'd, V>(_: &'c String) -> MyStruct<'a>::MyFn<'a, 'b, 'c, V> where V: 'b, V: 'd {
type opaque<'a3, 'b3, 'c3>;
unimplemented!();
}
}
```
This PR adds the where clauses for the `MyFn` generated GATs.
This is a draft with a very ugly solution so we can make comments over concrete code.
r? `@compiler-errors`