Rollup merge of #120896 - compiler-errors:coro-closure-kind, r=oli-obk
Print kind of coroutine closure Make sure that we print "async closure" when we have an async closure, rather than calling it generically a ["coroutine-closure"](https://github.com/rust-lang/rust/pull/120361). Fixes #120886 r? oli-obk
This commit is contained in:
commit
870435b50b
9 changed files with 29 additions and 12 deletions
|
@ -877,7 +877,24 @@ pub trait PrettyPrinter<'tcx>: Printer<'tcx> + fmt::Write {
|
||||||
ty::CoroutineClosure(did, args) => {
|
ty::CoroutineClosure(did, args) => {
|
||||||
p!(write("{{"));
|
p!(write("{{"));
|
||||||
if !self.should_print_verbose() {
|
if !self.should_print_verbose() {
|
||||||
p!(write("coroutine-closure"));
|
match self.tcx().coroutine_kind(self.tcx().coroutine_for_closure(did)).unwrap()
|
||||||
|
{
|
||||||
|
hir::CoroutineKind::Desugared(
|
||||||
|
hir::CoroutineDesugaring::Async,
|
||||||
|
hir::CoroutineSource::Closure,
|
||||||
|
) => p!("async closure"),
|
||||||
|
hir::CoroutineKind::Desugared(
|
||||||
|
hir::CoroutineDesugaring::AsyncGen,
|
||||||
|
hir::CoroutineSource::Closure,
|
||||||
|
) => p!("async gen closure"),
|
||||||
|
hir::CoroutineKind::Desugared(
|
||||||
|
hir::CoroutineDesugaring::Gen,
|
||||||
|
hir::CoroutineSource::Closure,
|
||||||
|
) => p!("gen closure"),
|
||||||
|
_ => unreachable!(
|
||||||
|
"coroutine from coroutine-closure should have CoroutineSource::Closure"
|
||||||
|
),
|
||||||
|
}
|
||||||
// FIXME(eddyb) should use `def_span`.
|
// FIXME(eddyb) should use `def_span`.
|
||||||
if let Some(did) = did.as_local() {
|
if let Some(did) = did.as_local() {
|
||||||
if self.tcx().sess.opts.unstable_opts.span_free_formats {
|
if self.tcx().sess.opts.unstable_opts.span_free_formats {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// MIR for `main::{closure#0}::{closure#0}` 0 coroutine_closure_by_move
|
// MIR for `main::{closure#0}::{closure#0}` 0 coroutine_closure_by_move
|
||||||
|
|
||||||
fn main::{closure#0}::{closure#0}(_1: {coroutine-closure@$DIR/async_closure_shims.rs:39:33: 39:52}, _2: i32) -> {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10} {
|
fn main::{closure#0}::{closure#0}(_1: {async closure@$DIR/async_closure_shims.rs:39:33: 39:52}, _2: i32) -> {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10} {
|
||||||
let mut _0: {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10};
|
let mut _0: {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10};
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// MIR for `main::{closure#0}::{closure#0}` 0 coroutine_closure_by_move
|
// MIR for `main::{closure#0}::{closure#0}` 0 coroutine_closure_by_move
|
||||||
|
|
||||||
fn main::{closure#0}::{closure#0}(_1: {coroutine-closure@$DIR/async_closure_shims.rs:39:33: 39:52}, _2: i32) -> {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10} {
|
fn main::{closure#0}::{closure#0}(_1: {async closure@$DIR/async_closure_shims.rs:39:33: 39:52}, _2: i32) -> {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10} {
|
||||||
let mut _0: {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10};
|
let mut _0: {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10};
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// MIR for `main::{closure#0}::{closure#0}` 0 coroutine_closure_by_mut
|
// MIR for `main::{closure#0}::{closure#0}` 0 coroutine_closure_by_mut
|
||||||
|
|
||||||
fn main::{closure#0}::{closure#0}(_1: &mut {coroutine-closure@$DIR/async_closure_shims.rs:39:33: 39:52}, _2: i32) -> {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10} {
|
fn main::{closure#0}::{closure#0}(_1: &mut {async closure@$DIR/async_closure_shims.rs:39:33: 39:52}, _2: i32) -> {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10} {
|
||||||
debug a => _2;
|
debug a => _2;
|
||||||
debug b => ((*_1).0: i32);
|
debug b => ((*_1).0: i32);
|
||||||
let mut _0: {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10};
|
let mut _0: {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10};
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// MIR for `main::{closure#0}::{closure#0}` 0 coroutine_closure_by_mut
|
// MIR for `main::{closure#0}::{closure#0}` 0 coroutine_closure_by_mut
|
||||||
|
|
||||||
fn main::{closure#0}::{closure#0}(_1: &mut {coroutine-closure@$DIR/async_closure_shims.rs:39:33: 39:52}, _2: i32) -> {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10} {
|
fn main::{closure#0}::{closure#0}(_1: &mut {async closure@$DIR/async_closure_shims.rs:39:33: 39:52}, _2: i32) -> {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10} {
|
||||||
debug a => _2;
|
debug a => _2;
|
||||||
debug b => ((*_1).0: i32);
|
debug b => ((*_1).0: i32);
|
||||||
let mut _0: {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10};
|
let mut _0: {async closure body@$DIR/async_closure_shims.rs:39:53: 42:10};
|
||||||
|
|
|
@ -5,5 +5,5 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
fn needs_fn(x: impl FnOnce()) {}
|
fn needs_fn(x: impl FnOnce()) {}
|
||||||
needs_fn(async || {});
|
needs_fn(async || {});
|
||||||
//~^ ERROR expected `{coroutine-closure@is-not-fn.rs:7:14}` to be a closure that returns `()`
|
//~^ ERROR expected `{async closure@is-not-fn.rs:7:14}` to be a closure that returns `()`
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
error[E0271]: expected `{coroutine-closure@is-not-fn.rs:7:14}` to be a closure that returns `()`, but it returns `{async closure body@$DIR/is-not-fn.rs:7:23: 7:25}`
|
error[E0271]: expected `{async closure@is-not-fn.rs:7:14}` to be a closure that returns `()`, but it returns `{async closure body@$DIR/is-not-fn.rs:7:23: 7:25}`
|
||||||
--> $DIR/is-not-fn.rs:7:14
|
--> $DIR/is-not-fn.rs:7:14
|
||||||
|
|
|
|
||||||
LL | needs_fn(async || {});
|
LL | needs_fn(async || {});
|
||||||
|
|
|
@ -2,7 +2,7 @@ error[E0382]: use of moved value: `x`
|
||||||
--> $DIR/move-consuming-capture.rs:17:9
|
--> $DIR/move-consuming-capture.rs:17:9
|
||||||
|
|
|
|
||||||
LL | let x = async move || {
|
LL | let x = async move || {
|
||||||
| - move occurs because `x` has type `{coroutine-closure@$DIR/move-consuming-capture.rs:13:17: 13:30}`, which does not implement the `Copy` trait
|
| - move occurs because `x` has type `{async closure@$DIR/move-consuming-capture.rs:13:17: 13:30}`, which does not implement the `Copy` trait
|
||||||
...
|
...
|
||||||
LL | x().await;
|
LL | x().await;
|
||||||
| --- `x` moved due to this method call
|
| --- `x` moved due to this method call
|
||||||
|
|
|
@ -18,16 +18,16 @@ help: use parentheses to call this function
|
||||||
LL | bar(foo());
|
LL | bar(foo());
|
||||||
| ++
|
| ++
|
||||||
|
|
||||||
error[E0277]: `{coroutine-closure@$DIR/async-fn-ctor-passed-as-arg-where-it-should-have-been-called.rs:11:25: 11:33}` is not a future
|
error[E0277]: `{async closure@$DIR/async-fn-ctor-passed-as-arg-where-it-should-have-been-called.rs:11:25: 11:33}` is not a future
|
||||||
--> $DIR/async-fn-ctor-passed-as-arg-where-it-should-have-been-called.rs:12:9
|
--> $DIR/async-fn-ctor-passed-as-arg-where-it-should-have-been-called.rs:12:9
|
||||||
|
|
|
|
||||||
LL | bar(async_closure);
|
LL | bar(async_closure);
|
||||||
| --- ^^^^^^^^^^^^^ `{coroutine-closure@$DIR/async-fn-ctor-passed-as-arg-where-it-should-have-been-called.rs:11:25: 11:33}` is not a future
|
| --- ^^^^^^^^^^^^^ `{async closure@$DIR/async-fn-ctor-passed-as-arg-where-it-should-have-been-called.rs:11:25: 11:33}` is not a future
|
||||||
| |
|
| |
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: the trait `Future` is not implemented for `{coroutine-closure@$DIR/async-fn-ctor-passed-as-arg-where-it-should-have-been-called.rs:11:25: 11:33}`
|
= help: the trait `Future` is not implemented for `{async closure@$DIR/async-fn-ctor-passed-as-arg-where-it-should-have-been-called.rs:11:25: 11:33}`
|
||||||
= note: {coroutine-closure@$DIR/async-fn-ctor-passed-as-arg-where-it-should-have-been-called.rs:11:25: 11:33} must be a future or must implement `IntoFuture` to be awaited
|
= note: {async closure@$DIR/async-fn-ctor-passed-as-arg-where-it-should-have-been-called.rs:11:25: 11:33} must be a future or must implement `IntoFuture` to be awaited
|
||||||
note: required by a bound in `bar`
|
note: required by a bound in `bar`
|
||||||
--> $DIR/async-fn-ctor-passed-as-arg-where-it-should-have-been-called.rs:7:16
|
--> $DIR/async-fn-ctor-passed-as-arg-where-it-should-have-been-called.rs:7:16
|
||||||
|
|
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue