mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-29 12:04:20 +00:00
```
error[E0308]: `if` and `else` have incompatible types
--> $DIR/if-else-chain-missing-else.rs:12:12
|
LL | let x = if let Ok(x) = res {
| ______________-
LL | | x
| | - expected because of this
LL | | } else if let Err(e) = res {
| | ____________^
LL | || return Err(e);
LL | || };
| || ^
| ||_____|
| |_____`if` and `else` have incompatible types
| expected `i32`, found `()`
|
= note: `if` expressions without `else` evaluate to `()`
= note: consider adding an `else` block that evaluates to the expected type
```
We probably want a longer explanation and fewer spans on this case.
Partially address #133316.
21 lines
341 B
Rust
21 lines
341 B
Rust
enum Cause { Cause1, Cause2 }
|
|
struct MyErr { x: Cause }
|
|
|
|
fn main() {
|
|
_ = f();
|
|
}
|
|
|
|
fn f() -> Result<i32, MyErr> {
|
|
let res = could_fail();
|
|
let x = if let Ok(x) = res {
|
|
x
|
|
} else if let Err(e) = res { //~ ERROR `if` and `else`
|
|
return Err(e);
|
|
};
|
|
Ok(x)
|
|
}
|
|
|
|
fn could_fail() -> Result<i32, MyErr> {
|
|
Ok(0)
|
|
}
|