| //@ edition:2018 | |
| // > Suggest returning tail expressions that match return type | |
| // > | |
| // > Some newcomers are confused by the behavior of tail expressions, | |
| // > interpreting that "leaving out the `;` makes it the return value". | |
| // > To help them go in the right direction, suggest using return instead | |
| // > when applicable. | |
| // (original commit description for this test) | |
| // | |
| // This test was amended to also serve as a regression test for #92308, where | |
| // this suggestion would not trigger with async functions. | |
| fn main() { | |
| } | |
| fn foo(x: bool) -> Result<f64, i32> { | |
| if x { | |
| Err(42) | |
| //~^ ERROR mismatched types | |
| //~| HELP you might have meant to return this value | |
| } | |
| Ok(42.0) | |
| } | |
| async fn bar(x: bool) -> Result<f64, i32> { | |
| if x { | |
| Err(42) | |
| //~^ ERROR mismatched types | |
| //~| HELP you might have meant to return this value | |
| } | |
| Ok(42.0) | |
| } | |
| trait Identity { | |
| type Out; | |
| } | |
| impl<T> Identity for T { | |
| type Out = T; | |
| } | |
| async fn foo2() -> i32 { | |
| if true { | |
| 1i32 | |
| //~^ ERROR mismatched types | |
| //~| HELP you might have meant to return this value | |
| } | |
| 0 | |
| } | |
| struct Receiver; | |
| impl Receiver { | |
| fn generic<T>(self) -> Option<T> { | |
| None | |
| } | |
| } | |
| fn method() -> Option<i32> { | |
| if true { | |
| Receiver.generic(); | |
| //~^ ERROR type annotations needed | |
| //~| HELP consider specifying the generic argument | |
| } | |
| None | |
| } |