rust-lang/rust

E0308 for coroutines kinda cryptic

matthiaskrgr opened this issue · 2 comments

Code

#![feature(coroutines)]
#![crate_type="lib"]

async fn async_fn() -> i32 {
    move || {
        yield 1_u32;
    }
}

Current output

error[E0308]: mismatched types
 --> 94BA3E9349D8E32F911462C954A9A278963282E62BF874B0EED4F13C0EFFE468.rs:5:5
  |
5 | /     move || {
6 | |         yield 1_u32;
7 | |     }
  | |_____^ expected `i32`, found coroutine
  |
  = note:   expected type `i32`
          found coroutine `{coroutine@94BA3E9349D8E32F911462C954A9A278963282E62BF874B0EED4F13C0EFFE468.rs:5:5: 5:12}`

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0308`.

Desired output

`found coroutine<u32>`   or something like that?

Rationale and extra context

No response

Other cases

No response

Anything else?

No response

This is no worse than a closure error.

error[E0308]: mismatched types
 --> src/lib.rs:2:5
  |
2 | /     move || {
3 | |         
4 | |     }
  | |_____^ expected `i32`, found closure
  |
  = note: expected type `i32`
          found closure `{closure@src/lib.rs:2:5: 2:12}`

Is it worse because you generate files with wild names like 94BA3E9349D8E32F911462C954A9A278963282E62BF874B0EED4F13C0EFFE468.rs?

That being said, if you think closure type names are cryptic ({closure@FILE:LL:CC}), then that's a separate issue. Probably one that has had discussions/bikeshedding in the past?