about summary refs log tree commit diff
path: root/compiler/rustc_error_codes/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-02-12 21:42:10 +0000
committerbors <bors@rust-lang.org>2022-02-12 21:42:10 +0000
commit3cfa4def7c87d571bd46d92fed608edf8fad236e (patch)
tree43fadb34acfa47419ac74221dbca1161938dbeee /compiler/rustc_error_codes/src
parent5d8767cb229b097fedb1dd4bd9420d463c37774f (diff)
parent10cf626d0ea7be3eb971691772b5eb30013d4f02 (diff)
downloadrust-3cfa4def7c87d571bd46d92fed608edf8fad236e.tar.gz
rust-3cfa4def7c87d571bd46d92fed608edf8fad236e.zip
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
Diffstat (limited to 'compiler/rustc_error_codes/src')
-rw-r--r--compiler/rustc_error_codes/src/error_codes/E0760.md6
1 files changed, 3 insertions, 3 deletions
diff --git a/compiler/rustc_error_codes/src/error_codes/E0760.md b/compiler/rustc_error_codes/src/error_codes/E0760.md
index e1dcfefebcd..65acd4fabdf 100644
--- a/compiler/rustc_error_codes/src/error_codes/E0760.md
+++ b/compiler/rustc_error_codes/src/error_codes/E0760.md
@@ -1,4 +1,4 @@
-`async fn`/`impl trait` return type cannot contain a projection
+`impl trait` return type cannot contain a projection
 or `Self` that references lifetimes from a parent scope.
 
 Erroneous code example:
@@ -7,7 +7,7 @@ Erroneous code example:
 struct S<'a>(&'a i32);
 
 impl<'a> S<'a> {
-    async fn new(i: &'a i32) -> Self {
+    fn new(i: &'a i32) -> impl Into<Self> {
         S(&22)
     }
 }
@@ -19,7 +19,7 @@ To fix this error we need to spell out `Self` to `S<'a>`:
 struct S<'a>(&'a i32);
 
 impl<'a> S<'a> {
-    async fn new(i: &'a i32) -> S<'a> {
+    fn new(i: &'a i32) -> impl Into<S<'a>> {
         S(&22)
     }
 }