]> git.lizzy.rs Git - rust.git/commit - src/tools/miri
Auto merge of #91403 - cjgillot:inherit-async, r=oli-obk
authorbors <bors@rust-lang.org>
Sat, 12 Feb 2022 21:42:10 +0000 (21:42 +0000)
committerbors <bors@rust-lang.org>
Sat, 12 Feb 2022 21:42:10 +0000 (21:42 +0000)
commit3cfa4def7c87d571bd46d92fed608edf8fad236e
tree43fadb34acfa47419ac74221dbca1161938dbeee
parent5d8767cb229b097fedb1dd4bd9420d463c37774f
parent10cf626d0ea7be3eb971691772b5eb30013d4f02
Auto merge of #91403 - cjgillot:inherit-async, r=oli-obk

Inherit lifetimes for async fn instead of duplicating them.

The current desugaring of `async fn foo<'a>(&usize) -> &u8` is equivalent to
```rust
fn foo<'a, '0>(&'0 usize) -> foo<'static, 'static>::Opaque<'a, '0, '_>;
type foo<'_a, '_0>::Opaque<'a, '0, '1> = impl Future<Output = &'1 u8>;
```
following the RPIT model.

Duplicating all the inherited lifetime parameters and setting the inherited version to `'static` makes lowering more complex and causes issues like #61949. This PR removes the duplication of inherited lifetimes to directly use
```rust
fn foo<'a, '0>(&'0 usize) -> foo<'a, '0>::Opaque<'_>;
type foo<'a, '0>::Opaque<'1> = impl Future<Output = &'1 u8>;
```
following the TAIT model.

Fixes https://github.com/rust-lang/rust/issues/61949