mirror of
https://github.com/rust-lang/rust
synced 2024-09-06 01:11:17 +00:00
![Esteban Küber](/assets/img/avatar_default.png)
On functions with a default return type that influences the coerced type of `match` arms, check if the failing arm is actually of type `!`. If so, suggest changing the return type so the coercion against the prior arms is successful. ``` error[E0308]: `match` arms have incompatible types --> $DIR/match-tail-expr-never-type-error.rs:9:13 | LL | fn bar(a: bool) { | - help: try adding a return type: `-> i32` LL | / match a { LL | | true => 1, | | - this is found to be of type `{integer}` LL | | false => { LL | | never() | | ^^^^^^^ | | | | | expected integer, found `()` | | this expression is of type `!`, but it get's coerced to `()` due to its surrounding expression LL | | } LL | | } | |_____- `match` arms have incompatible types ``` Fix #24157.
17 lines
233 B
Rust
17 lines
233 B
Rust
fn never() -> ! {
|
|
loop {}
|
|
}
|
|
|
|
fn bar(a: bool) {
|
|
match a {
|
|
true => 1,
|
|
false => {
|
|
never() //~ ERROR `match` arms have incompatible types
|
|
}
|
|
}
|
|
}
|
|
fn main() {
|
|
bar(true);
|
|
bar(false);
|
|
}
|