| //@ edition:2018 |
| #![deny(unused_must_use)] |
| |
| |
| #[must_use] |
| async fn foo() -> i32 { |
| 1 |
| } |
| |
| #[must_use] |
| fn bar() -> impl std::future::Future<Output=i32> { |
| async { |
| 42 |
| } |
| } |
| |
| async fn baz() -> i32 { |
| 0 |
| } |
| |
| struct Wowee {} |
| |
| impl Wowee { |
| #[must_use] |
| async fn test_method() -> i32 { |
| 1 |
| } |
| } |
| |
| async fn test() { |
| foo(); //~ ERROR unused return value of `foo` that must be used |
| //~^ ERROR unused implementer of `Future` that must be used |
| foo().await; //~ ERROR unused output of future returned by `foo` that must be used |
| bar(); //~ ERROR unused return value of `bar` that must be used |
| //~^ ERROR unused implementer of `Future` that must be used |
| bar().await; // ok, it's not an async fn |
| baz(); //~ ERROR unused implementer of `Future` that must be used |
| baz().await; // ok |
| } |
| |
| /* 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() { |
| } |