-
Notifications
You must be signed in to change notification settings - Fork 12.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Suggest adding
return
if the type of unused semi return value can c…
…oerce to the fn return type
- Loading branch information
1 parent
8fdb0a9
commit a204ada
Showing
7 changed files
with
229 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
61 changes: 61 additions & 0 deletions
61
tests/ui/inference/issue-86094-suggest-add-return-to-coerce-ret-ty.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
struct MyError; | ||
|
||
fn foo(x: bool) -> Result<(), MyError> { | ||
if x { | ||
Err(MyError); | ||
//~^ ERROR type annotations needed | ||
} | ||
|
||
Ok(()) | ||
} | ||
|
||
fn bar(x: bool) -> Result<(), MyError> { | ||
if x { | ||
Ok(()); | ||
//~^ ERROR type annotations needed | ||
} | ||
|
||
Ok(()) | ||
} | ||
|
||
fn baz(x: bool) -> Result<(), MyError> { | ||
//~^ ERROR mismatched types | ||
if x { | ||
1; | ||
} | ||
|
||
Err(MyError); | ||
} | ||
|
||
fn error() -> Result<(), MyError> { | ||
Err(MyError) | ||
} | ||
|
||
fn bak(x: bool) -> Result<(), MyError> { | ||
if x { | ||
//~^ ERROR mismatched types | ||
error(); | ||
} else { | ||
//~^ ERROR mismatched types | ||
error(); | ||
} | ||
} | ||
|
||
fn bad(x: bool) -> Result<(), MyError> { | ||
Err(MyError); //~ ERROR type annotations needed | ||
Ok(()) | ||
} | ||
|
||
fn with_closure<F, A, B>(_: F) -> i32 | ||
where | ||
F: FnOnce(A, B), | ||
{ | ||
0 | ||
} | ||
|
||
fn a() -> i32 { | ||
with_closure(|x: u32, y| {}); //~ ERROR type annotations needed | ||
0 | ||
} | ||
|
||
fn main() {} |
98 changes: 98 additions & 0 deletions
98
tests/ui/inference/issue-86094-suggest-add-return-to-coerce-ret-ty.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
error[E0282]: type annotations needed | ||
--> $DIR/issue-86094-suggest-add-return-to-coerce-ret-ty.rs:5:9 | ||
| | ||
LL | Err(MyError); | ||
| ^^^ cannot infer type of the type parameter `T` declared on the enum `Result` | ||
| | ||
help: consider specifying the generic arguments | ||
| | ||
LL | Err::<T, MyError>(MyError); | ||
| ++++++++++++++ | ||
help: you might have meant to return this to infer its type parameters | ||
| | ||
LL | return Err(MyError); | ||
| ++++++ | ||
|
||
error[E0282]: type annotations needed | ||
--> $DIR/issue-86094-suggest-add-return-to-coerce-ret-ty.rs:14:9 | ||
| | ||
LL | Ok(()); | ||
| ^^ cannot infer type of the type parameter `E` declared on the enum `Result` | ||
| | ||
help: consider specifying the generic arguments | ||
| | ||
LL | Ok::<(), E>(()); | ||
| +++++++++ | ||
help: you might have meant to return this to infer its type parameters | ||
| | ||
LL | return Ok(()); | ||
| ++++++ | ||
|
||
error[E0308]: mismatched types | ||
--> $DIR/issue-86094-suggest-add-return-to-coerce-ret-ty.rs:21:20 | ||
| | ||
LL | fn baz(x: bool) -> Result<(), MyError> { | ||
| --- ^^^^^^^^^^^^^^^^^^^ expected `Result<(), MyError>`, found `()` | ||
| | | ||
| implicitly returns `()` as its body has no tail or `return` expression | ||
... | ||
LL | Err(MyError); | ||
| - help: remove this semicolon to return this value | ||
| | ||
= note: expected enum `Result<(), MyError>` | ||
found unit type `()` | ||
|
||
error[E0308]: mismatched types | ||
--> $DIR/issue-86094-suggest-add-return-to-coerce-ret-ty.rs:35:10 | ||
| | ||
LL | if x { | ||
| __________^ | ||
LL | | | ||
LL | | error(); | ||
| | - help: remove this semicolon to return this value | ||
LL | | } else { | ||
| |_____^ expected `Result<(), MyError>`, found `()` | ||
| | ||
= note: expected enum `Result<(), MyError>` | ||
found unit type `()` | ||
|
||
error[E0308]: mismatched types | ||
--> $DIR/issue-86094-suggest-add-return-to-coerce-ret-ty.rs:38:12 | ||
| | ||
LL | } else { | ||
| ____________^ | ||
LL | | | ||
LL | | error(); | ||
| | - help: remove this semicolon to return this value | ||
LL | | } | ||
| |_____^ expected `Result<(), MyError>`, found `()` | ||
| | ||
= note: expected enum `Result<(), MyError>` | ||
found unit type `()` | ||
|
||
error[E0282]: type annotations needed | ||
--> $DIR/issue-86094-suggest-add-return-to-coerce-ret-ty.rs:45:5 | ||
| | ||
LL | Err(MyError); | ||
| ^^^ cannot infer type of the type parameter `T` declared on the enum `Result` | ||
| | ||
help: consider specifying the generic arguments | ||
| | ||
LL | Err::<T, MyError>(MyError); | ||
| ++++++++++++++ | ||
|
||
error[E0282]: type annotations needed | ||
--> $DIR/issue-86094-suggest-add-return-to-coerce-ret-ty.rs:57:27 | ||
| | ||
LL | with_closure(|x: u32, y| {}); | ||
| ^ | ||
| | ||
help: consider giving this closure parameter an explicit type | ||
| | ||
LL | with_closure(|x: u32, y: /* Type */| {}); | ||
| ++++++++++++ | ||
|
||
error: aborting due to 7 previous errors | ||
|
||
Some errors have detailed explanations: E0282, E0308. | ||
For more information about an error, try `rustc --explain E0282`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters