-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Point at cause for expectation in return type type error #57723
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
9050729
19255dc
c431850
9b8243a
fbb0728
954769e
2e06d9c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
fn unrelated() -> Result<(), std::string::ParseError> { // #57664 | ||
let x = 0; | ||
|
||
match x { | ||
1 => { | ||
let property_value_as_string = "a".parse()?; | ||
} | ||
2 => { | ||
let value: &bool = unsafe { &42 }; | ||
//~^ ERROR mismatched types | ||
} | ||
}; | ||
|
||
Ok(()) | ||
} | ||
|
||
fn main() {} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
error[E0308]: mismatched types | ||
--> $DIR/point-to-type-err-cause-on-impl-trait-return-2.rs:9:41 | ||
| | ||
LL | let value: &bool = unsafe { &42 }; | ||
| ^^^ expected bool, found integer | ||
| | ||
= note: expected type `&bool` | ||
found type `&{integer}` | ||
|
||
error: aborting due to previous error | ||
|
||
For more information about this error, try `rustc --explain E0308`. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
fn foo() -> impl std::fmt::Display { | ||
if false { | ||
return 0i32; | ||
} | ||
1u32 | ||
//~^ ERROR mismatched types | ||
} | ||
|
||
fn bar() -> impl std::fmt::Display { | ||
if false { | ||
return 0i32; | ||
} else { | ||
return 1u32; | ||
//~^ ERROR mismatched types | ||
} | ||
} | ||
|
||
fn baz() -> impl std::fmt::Display { | ||
if false { | ||
//~^ ERROR mismatched types | ||
return 0i32; | ||
} else { | ||
1u32 | ||
} | ||
} | ||
|
||
fn qux() -> impl std::fmt::Display { | ||
if false { | ||
0i32 | ||
} else { | ||
1u32 | ||
//~^ ERROR if and else have incompatible types | ||
} | ||
} | ||
|
||
fn main() {} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
error[E0308]: mismatched types | ||
--> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:5:5 | ||
| | ||
LL | return 0i32; | ||
| ---- expected because of this statement | ||
LL | } | ||
LL | 1u32 | ||
| ^^^^ expected i32, found u32 | ||
| | ||
= note: expected type `i32` | ||
found type `u32` | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should these errors also point at the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think they could and that would be a tad better but the errors aren't much worse off for the lack of it. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. filed #57743 |
||
|
||
error[E0308]: mismatched types | ||
--> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:13:16 | ||
| | ||
LL | return 0i32; | ||
| ---- expected because of this statement | ||
LL | } else { | ||
LL | return 1u32; | ||
| ^^^^ expected i32, found u32 | ||
| | ||
= note: expected type `i32` | ||
found type `u32` | ||
|
||
error[E0308]: mismatched types | ||
--> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:19:5 | ||
| | ||
LL | / if false { | ||
LL | | //~^ ERROR mismatched types | ||
LL | | return 0i32; | ||
| | ---- expected because of this statement | ||
LL | | } else { | ||
LL | | 1u32 | ||
LL | | } | ||
| |_____^ expected i32, found u32 | ||
| | ||
= note: expected type `i32` | ||
found type `u32` | ||
|
||
error[E0308]: if and else have incompatible types | ||
--> $DIR/point-to-type-err-cause-on-impl-trait-return.rs:31:9 | ||
| | ||
LL | / if false { | ||
LL | | 0i32 | ||
| | ---- expected because of this | ||
LL | | } else { | ||
LL | | 1u32 | ||
| | ^^^^ expected i32, found u32 | ||
LL | | //~^ ERROR if and else have incompatible types | ||
LL | | } | ||
| |_____- if and else have incompatible types | ||
| | ||
= note: expected type `i32` | ||
found type `u32` | ||
|
||
error: aborting due to 4 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0308`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yay, drive by fixes :)