Skip to content
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

Add explanatory note to async block type mismatch error #126215

Merged
merged 1 commit into from
Jun 10, 2024

Conversation

gurry
Copy link
Contributor

@gurry gurry commented Jun 10, 2024

The async block type mismatch error might leave the user wondering as to why it occurred. The new note should give them the needed context.

Changes this diagnostic:

error[E0308]: mismatched types
 --> src/main.rs:5:23
  |
2 |     let a = async { 1 };
  |             ----------- the expected `async` block
3 |     let b = async { 2 };
  |             ----------- the found `async` block
4 |     
5 |     let bad = vec![a, b];
  |                       ^ expected `async` block, found a different `async` block
  |
  = note: expected `async` block `{async block@src/main.rs:2:13: 2:24}`
             found `async` block `{async block@src/main.rs:3:13: 3:24}`

to this:

error[E0308]: mismatched types
 --> src/main.rs:5:23
  |
2 |     let a = async { 1 };
  |             ----------- the expected `async` block
3 |     let b = async { 2 };
  |             ----------- the found `async` block
4 |     
5 |     let bad = vec![a, b];
  |                       ^ expected `async` block, found a different `async` block
  |
  = note: expected `async` block `{async block@src/main.rs:2:13: 2:24}`
             found `async` block `{async block@src/main.rs:3:13: 3:24}`
  = note: no two async blocks, even if identical, have the same type
  = help: consider pinning your async block and and casting it to a trait object

Fixes #125737

@rustbot
Copy link
Collaborator

rustbot commented Jun 10, 2024

r? @lcnr

rustbot has assigned @lcnr.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jun 10, 2024
if self.tcx.coroutine_is_async(def_id1)
&& self.tcx.coroutine_is_async(def_id2) =>
{
diag.note("every async block has a different type even when the output type is the same");
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do suggest any changes in the note's text that could make it clearer or shorter.

@gurry gurry force-pushed the 125737-bad-err-anon-futs branch from 2eb2ab5 to 9602df3 Compare June 10, 2024 11:19
@gurry gurry force-pushed the 125737-bad-err-anon-futs branch from 9602df3 to 251d2d0 Compare June 10, 2024 11:46
@lcnr
Copy link
Contributor

lcnr commented Jun 10, 2024

thanks

@bors r+ rollup

@bors
Copy link
Contributor

bors commented Jun 10, 2024

📌 Commit 251d2d0 has been approved by lcnr

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 10, 2024
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Jun 10, 2024
…lcnr

Add explanatory note to async block type mismatch error

The async block type mismatch error might leave the user wondering as to why it occurred. The new note should give them the needed context.

Changes this diagnostic:
```
error[E0308]: mismatched types
 --> src/main.rs:5:23
  |
2 |     let a = async { 1 };
  |             ----------- the expected `async` block
3 |     let b = async { 2 };
  |             ----------- the found `async` block
4 |
5 |     let bad = vec![a, b];
  |                       ^ expected `async` block, found a different `async` block
  |
  = note: expected `async` block `{async block@src/main.rs:2:13: 2:24}`
             found `async` block `{async block@src/main.rs:3:13: 3:24}`
```

to this:
```
error[E0308]: mismatched types
 --> src/main.rs:5:23
  |
2 |     let a = async { 1 };
  |             ----------- the expected `async` block
3 |     let b = async { 2 };
  |             ----------- the found `async` block
4 |
5 |     let bad = vec![a, b];
  |                       ^ expected `async` block, found a different `async` block
  |
  = note: expected `async` block `{async block@src/main.rs:2:13: 2:24}`
             found `async` block `{async block@src/main.rs:3:13: 3:24}`
  = note: no two async blocks, even if identical, have the same type
  = help: consider pinning your async block and and casting it to a trait object
```

Fixes rust-lang#125737
bors added a commit to rust-lang-ci/rust that referenced this pull request Jun 10, 2024
…iaskrgr

Rollup of 10 pull requests

Successful merges:

 - rust-lang#126036 (Migrate `run-make/short-ice` to `rmake`)
 - rust-lang#126063 (Remove some unused crate dependencies.)
 - rust-lang#126115 (Fix ICE due to `unwrap` in `probe_for_name_many`)
 - rust-lang#126159 (ScalarInt: size mismatches are a bug, do not delay the panic)
 - rust-lang#126184 (interpret: do not ICE on padded non-pow2 SIMD vectors)
 - rust-lang#126191 (Fix `NonZero` doctest inconsistencies)
 - rust-lang#126211 (migrate tests/run-make/llvm-outputs to use rmake.rs)
 - rust-lang#126212 (fix: build on haiku)
 - rust-lang#126215 (Add explanatory note to async block type mismatch error)
 - rust-lang#126223 (run-make: add `run_in_tmpdir` self-test)

r? `@ghost`
`@rustbot` modify labels: rollup
bors added a commit to rust-lang-ci/rust that referenced this pull request Jun 10, 2024
…iaskrgr

Rollup of 9 pull requests

Successful merges:

 - rust-lang#126063 (Remove some unused crate dependencies.)
 - rust-lang#126115 (Fix ICE due to `unwrap` in `probe_for_name_many`)
 - rust-lang#126159 (ScalarInt: size mismatches are a bug, do not delay the panic)
 - rust-lang#126184 (interpret: do not ICE on padded non-pow2 SIMD vectors)
 - rust-lang#126191 (Fix `NonZero` doctest inconsistencies)
 - rust-lang#126211 (migrate tests/run-make/llvm-outputs to use rmake.rs)
 - rust-lang#126212 (fix: build on haiku)
 - rust-lang#126215 (Add explanatory note to async block type mismatch error)
 - rust-lang#126223 (run-make: add `run_in_tmpdir` self-test)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit f0adebc into rust-lang:master Jun 10, 2024
6 checks passed
@rustbot rustbot added this to the 1.81.0 milestone Jun 10, 2024
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Jun 10, 2024
Rollup merge of rust-lang#126215 - gurry:125737-bad-err-anon-futs, r=lcnr

Add explanatory note to async block type mismatch error

The async block type mismatch error might leave the user wondering as to why it occurred. The new note should give them the needed context.

Changes this diagnostic:
```
error[E0308]: mismatched types
 --> src/main.rs:5:23
  |
2 |     let a = async { 1 };
  |             ----------- the expected `async` block
3 |     let b = async { 2 };
  |             ----------- the found `async` block
4 |
5 |     let bad = vec![a, b];
  |                       ^ expected `async` block, found a different `async` block
  |
  = note: expected `async` block `{async block@src/main.rs:2:13: 2:24}`
             found `async` block `{async block@src/main.rs:3:13: 3:24}`
```

to this:
```
error[E0308]: mismatched types
 --> src/main.rs:5:23
  |
2 |     let a = async { 1 };
  |             ----------- the expected `async` block
3 |     let b = async { 2 };
  |             ----------- the found `async` block
4 |
5 |     let bad = vec![a, b];
  |                       ^ expected `async` block, found a different `async` block
  |
  = note: expected `async` block `{async block@src/main.rs:2:13: 2:24}`
             found `async` block `{async block@src/main.rs:3:13: 3:24}`
  = note: no two async blocks, even if identical, have the same type
  = help: consider pinning your async block and and casting it to a trait object
```

Fixes rust-lang#125737
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Unhelpful error on mismatched types for anonymous futures
4 participants