diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-08-07 01:19:33 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-07 01:19:33 +0200 |
| commit | 1a96f31f763142942adf7f15421b2d59494c2af4 (patch) | |
| tree | 7d6dced1363253f64a7f34d51152f7d40b1677f5 /compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp | |
| parent | 879c17f3f9a460e8bb28becead81111ee2cadd97 (diff) | |
| parent | 1f463ac40735529abd7343bb8a12a1888bb623df (diff) | |
| download | rust-1a96f31f763142942adf7f15421b2d59494c2af4.tar.gz rust-1a96f31f763142942adf7f15421b2d59494c2af4.zip | |
Rollup merge of #100130 - compiler-errors:erroneous-return-span, r=lcnr
Avoid pointing out `return` span if it has nothing to do with type error
This code:
```rust
fn f(_: String) {}
fn main() {
let x = || {
if true {
return ();
}
f("");
};
}
```
Emits this:
```
Compiling playground v0.0.1 (/playground)
error[E0308]: mismatched types
--> src/main.rs:8:11
|
8 | f("");
| ^^- help: try using a conversion method: `.to_string()`
| |
| expected struct `String`, found `&str`
|
note: return type inferred to be `String` here
--> src/main.rs:6:20
|
6 | return ();
| ^^
```
Specifically, that note has nothing to do with the type error in question. This is because the change implemented in #84244 tries to point out the `return` span on _any_ type coercion error within a closure that happens after a `return` statement, regardless of if the error has anything to do with it.
This is really easy to trigger -- just needs a closure (or an `async`) and an early return (or any other form, e.g. `?` operator suffices) -- and super distracting in production codebases. I'm letting #84128 regress because that issue is much harder to fix correctly, and I can re-open that issue after this lands.
As a drive-by, I added a `resolve_vars_if_possible` to the coercion error logic, which leads to some error improvements. Unrelated to the issue above, though.
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp')
0 files changed, 0 insertions, 0 deletions
