don't refer to async as 'generators'

and give return of async fn a better span
This commit is contained in:
SNCPlay42 2020-07-21 19:56:21 +01:00
parent 62bfcfd8a3
commit 34ff352989
3 changed files with 92 additions and 6 deletions

View file

@ -0,0 +1,29 @@
// edition:2018
#![feature(async_closure)]
use std::future::Future;
// test the quality of annotations giving lifetimes names (`'1`) when async constructs are involved
pub async fn async_fn(x: &mut i32) -> &i32 {
let y = &*x;
*x += 1; //~ ERROR cannot assign to `*x` because it is borrowed
y
}
pub fn async_closure(x: &mut i32) -> impl Future<Output=&i32> {
(async move || {
let y = &*x;
*x += 1; //~ ERROR cannot assign to `*x` because it is borrowed
y
})()
}
pub fn async_block(x: &mut i32) -> impl Future<Output=&i32> {
async move {
let y = &*x;
*x += 1; //~ ERROR cannot assign to `*x` because it is borrowed
y
}
}
fn main() {}

View file

@ -0,0 +1,39 @@
error[E0506]: cannot assign to `*x` because it is borrowed
--> $DIR/issue-74072-lifetime-name-annotations.rs:9:5
|
LL | pub async fn async_fn(x: &mut i32) -> &i32 {
| ---- return type of async function is &'1 i32
LL | let y = &*x;
| --- borrow of `*x` occurs here
LL | *x += 1;
| ^^^^^^^ assignment to borrowed `*x` occurs here
LL | y
| - returning this value requires that `*x` is borrowed for `'1`
error[E0506]: cannot assign to `*x` because it is borrowed
--> $DIR/issue-74072-lifetime-name-annotations.rs:16:9
|
LL | let y = &*x;
| --- borrow of `*x` occurs here
LL | *x += 1;
| ^^^^^^^ assignment to borrowed `*x` occurs here
LL | y
| - returning this value requires that `*x` is borrowed for `'1`
LL | })()
| - return type of async closure is &'1 i32
error[E0506]: cannot assign to `*x` because it is borrowed
--> $DIR/issue-74072-lifetime-name-annotations.rs:24:9
|
LL | let y = &*x;
| --- borrow of `*x` occurs here
LL | *x += 1;
| ^^^^^^^ assignment to borrowed `*x` occurs here
LL | y
| - returning this value requires that `*x` is borrowed for `'1`
LL | }
| - return type of async block is &'1 i32
error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0506`.