2021-10-06 15:19:39 -05:00
|
|
|
// edition:2018
|
2022-08-16 09:56:42 -05:00
|
|
|
#![deny(unused_must_use)]
|
|
|
|
|
2021-10-06 15:19:39 -05:00
|
|
|
|
|
|
|
#[must_use]
|
2022-08-16 09:56:42 -05:00
|
|
|
async fn foo() -> i32 {
|
2021-10-06 15:19:39 -05:00
|
|
|
1
|
|
|
|
}
|
|
|
|
|
2022-08-16 09:56:42 -05:00
|
|
|
#[must_use]
|
|
|
|
fn bar() -> impl std::future::Future<Output=i32> {
|
|
|
|
async {
|
|
|
|
42
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn baz() -> i32 {
|
|
|
|
0
|
|
|
|
}
|
2021-10-06 15:19:39 -05:00
|
|
|
|
|
|
|
struct Wowee {}
|
|
|
|
|
|
|
|
impl Wowee {
|
|
|
|
#[must_use]
|
|
|
|
async fn test_method() -> i32 {
|
|
|
|
1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-08-16 09:56:42 -05:00
|
|
|
async fn test() {
|
|
|
|
foo(); //~ ERROR unused return value of `foo` that must be used
|
|
|
|
//~^ ERROR unused implementer of `Future` that must be used
|
2022-08-17 10:21:43 -05:00
|
|
|
foo().await; //~ ERROR unused output of future returned by `foo` that must be used
|
2022-08-16 09:56:42 -05:00
|
|
|
bar(); //~ ERROR unused return value of `bar` that must be used
|
|
|
|
//~^ ERROR unused implementer of `Future` that must be used
|
2023-05-11 21:08:39 -05:00
|
|
|
bar().await; // ok, it's not an async fn
|
2022-08-16 09:56:42 -05:00
|
|
|
baz(); //~ ERROR unused implementer of `Future` that must be used
|
|
|
|
baz().await; // ok
|
|
|
|
}
|
|
|
|
|
2021-10-06 15:19:39 -05:00
|
|
|
/* FIXME(guswynn) update this test when async-fn-in-traits works
|
|
|
|
trait Doer {
|
|
|
|
#[must_use]
|
|
|
|
async fn test_trait_method() -> i32;
|
|
|
|
WARNING must_use
|
|
|
|
async fn test_other_trait() -> i32;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Doer for Wowee {
|
|
|
|
async fn test_trait_method() -> i32 {
|
|
|
|
1
|
|
|
|
}
|
|
|
|
#[must_use]
|
|
|
|
async fn test_other_trait() -> i32 {
|
|
|
|
WARNING must_use
|
|
|
|
1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
}
|