Add more tests for mismatched Option/Result return types.
This commit is contained in:
parent
003c892f9f
commit
85cc4710ef
@ -23,6 +23,21 @@ fn b() -> Result<(), ()> {
|
||||
//~| HELP try adding an expression
|
||||
}
|
||||
|
||||
fn c() -> Option<()> {
|
||||
for _ in [1, 2] {
|
||||
//~^ ERROR mismatched types
|
||||
f();
|
||||
}
|
||||
//~^ HELP try adding an expression
|
||||
}
|
||||
|
||||
fn d() -> Option<()> {
|
||||
c()?
|
||||
//~^ ERROR incompatible types
|
||||
//~| HELP try removing this `?`
|
||||
//~| HELP try adding an expression
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _: Option<()> = while false {};
|
||||
//~^ ERROR mismatched types
|
||||
|
@ -37,7 +37,52 @@ LL + Ok(())
|
||||
|
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/compatible-variants.rs:27:25
|
||||
--> $DIR/compatible-variants.rs:27:5
|
||||
|
|
||||
LL | fn c() -> Option<()> {
|
||||
| ---------- expected `Option<()>` because of return type
|
||||
LL | / for _ in [1, 2] {
|
||||
LL | |
|
||||
LL | | f();
|
||||
LL | | }
|
||||
| |_____^ expected enum `Option`, found `()`
|
||||
|
|
||||
= note: expected enum `Option<()>`
|
||||
found unit type `()`
|
||||
help: try adding an expression at the end of the block
|
||||
|
|
||||
LL ~ }
|
||||
LL + None
|
||||
|
|
||||
LL ~ }
|
||||
LL + Some(())
|
||||
|
|
||||
|
||||
error[E0308]: `?` operator has incompatible types
|
||||
--> $DIR/compatible-variants.rs:35:5
|
||||
|
|
||||
LL | c()?
|
||||
| ^^^^ expected enum `Option`, found `()`
|
||||
|
|
||||
= note: `?` operator cannot convert from `()` to `Option<()>`
|
||||
= note: expected enum `Option<()>`
|
||||
found unit type `()`
|
||||
help: try removing this `?`
|
||||
|
|
||||
LL - c()?
|
||||
LL + c()
|
||||
|
|
||||
help: try adding an expression at the end of the block
|
||||
|
|
||||
LL ~ c()?;
|
||||
LL + None
|
||||
|
|
||||
LL ~ c()?;
|
||||
LL + Some(())
|
||||
|
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/compatible-variants.rs:42:25
|
||||
|
|
||||
LL | let _: Option<()> = while false {};
|
||||
| ---------- ^^^^^^^^^^^^^^ expected enum `Option`, found `()`
|
||||
@ -52,7 +97,7 @@ LL | let _: Option<()> = Some(while false {});
|
||||
| +++++ +
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/compatible-variants.rs:31:9
|
||||
--> $DIR/compatible-variants.rs:46:9
|
||||
|
|
||||
LL | while false {}
|
||||
| ^^^^^^^^^^^^^^ expected enum `Option`, found `()`
|
||||
@ -69,7 +114,7 @@ LL + Some(())
|
||||
|
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/compatible-variants.rs:35:31
|
||||
--> $DIR/compatible-variants.rs:50:31
|
||||
|
|
||||
LL | let _: Result<i32, i32> = 1;
|
||||
| ---------------- ^ expected enum `Result`, found integer
|
||||
@ -86,7 +131,7 @@ LL | let _: Result<i32, i32> = Err(1);
|
||||
| ++++ +
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/compatible-variants.rs:38:26
|
||||
--> $DIR/compatible-variants.rs:53:26
|
||||
|
|
||||
LL | let _: Option<i32> = 1;
|
||||
| ----------- ^ expected enum `Option`, found integer
|
||||
@ -101,7 +146,7 @@ LL | let _: Option<i32> = Some(1);
|
||||
| +++++ +
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/compatible-variants.rs:41:28
|
||||
--> $DIR/compatible-variants.rs:56:28
|
||||
|
|
||||
LL | let _: Hey<i32, i32> = 1;
|
||||
| ------------- ^ expected enum `Hey`, found integer
|
||||
@ -118,7 +163,7 @@ LL | let _: Hey<i32, i32> = Hey::B(1);
|
||||
| +++++++ +
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/compatible-variants.rs:44:29
|
||||
--> $DIR/compatible-variants.rs:59:29
|
||||
|
|
||||
LL | let _: Hey<i32, bool> = false;
|
||||
| -------------- ^^^^^ expected enum `Hey`, found `bool`
|
||||
@ -133,7 +178,7 @@ LL | let _: Hey<i32, bool> = Hey::B(false);
|
||||
| +++++++ +
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/compatible-variants.rs:48:19
|
||||
--> $DIR/compatible-variants.rs:63:19
|
||||
|
|
||||
LL | let _ = Foo { bar };
|
||||
| ^^^ expected enum `Option`, found `i32`
|
||||
@ -145,6 +190,6 @@ help: try wrapping the expression in `Some`
|
||||
LL | let _ = Foo { bar: Some(bar) };
|
||||
| ++++++++++ +
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
error: aborting due to 11 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
||||
|
Loading…
Reference in New Issue
Block a user