From bd16825767d53dad8851e0e36c0d2c2392b1384c Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Sun, 16 May 2021 02:04:58 +0200 Subject: Allow `async {}` expressions in const contexts --- src/test/ui/consts/async-block.rs | 17 ++++++++++++++--- src/test/ui/consts/async-block.stderr | 8 -------- src/test/ui/consts/async-block.with_feature.stderr | 8 ++++++++ src/test/ui/consts/async-block.without_feature.stderr | 19 +++++++++++++++++++ src/test/ui/impl-trait/issues/issue-78721.stderr | 7 +++++-- .../ui/impl-trait/issues/issue-78722.full_tait.stderr | 7 +++++-- .../ui/impl-trait/issues/issue-78722.min_tait.stderr | 7 +++++-- 7 files changed, 56 insertions(+), 17 deletions(-) delete mode 100644 src/test/ui/consts/async-block.stderr create mode 100644 src/test/ui/consts/async-block.with_feature.stderr create mode 100644 src/test/ui/consts/async-block.without_feature.stderr (limited to 'src') diff --git a/src/test/ui/consts/async-block.rs b/src/test/ui/consts/async-block.rs index 1fa2a616091..78ec8aea724 100644 --- a/src/test/ui/consts/async-block.rs +++ b/src/test/ui/consts/async-block.rs @@ -1,8 +1,19 @@ -// From +// gate-test-const_async_blocks // edition:2018 +// revisions: with_feature without_feature + +#![feature(rustc_attrs)] +#![cfg_attr(with_feature, feature(const_async_blocks))] + +use std::future::Future; +// From const _: i32 = { core::mem::ManuallyDrop::new(async { 0 }); 4 }; -//~^ `async` block +//[without_feature]~^ `async` block + +static _FUT: &(dyn Future + Sync) = &async {}; +//[without_feature]~^ `async` block -fn main() {} +#[rustc_error] +fn main() {} //[with_feature]~ fatal error triggered by #[rustc_error] diff --git a/src/test/ui/consts/async-block.stderr b/src/test/ui/consts/async-block.stderr deleted file mode 100644 index 99f470623ac..00000000000 --- a/src/test/ui/consts/async-block.stderr +++ /dev/null @@ -1,8 +0,0 @@ -error: `async` blocks are not allowed in constants - --> $DIR/async-block.rs:5:47 - | -LL | const _: i32 = { core::mem::ManuallyDrop::new(async { 0 }); 4 }; - | ^^^^^^^^^^^ - -error: aborting due to previous error - diff --git a/src/test/ui/consts/async-block.with_feature.stderr b/src/test/ui/consts/async-block.with_feature.stderr new file mode 100644 index 00000000000..8c6364aeca6 --- /dev/null +++ b/src/test/ui/consts/async-block.with_feature.stderr @@ -0,0 +1,8 @@ +error: fatal error triggered by #[rustc_error] + --> $DIR/async-block.rs:19:1 + | +LL | fn main() {} + | ^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/consts/async-block.without_feature.stderr b/src/test/ui/consts/async-block.without_feature.stderr new file mode 100644 index 00000000000..93d0fbd3950 --- /dev/null +++ b/src/test/ui/consts/async-block.without_feature.stderr @@ -0,0 +1,19 @@ +error[E0658]: `async` blocks are not allowed in constants + --> $DIR/async-block.rs:12:47 + | +LL | const _: i32 = { core::mem::ManuallyDrop::new(async { 0 }); 4 }; + | ^^^^^^^^^^^ + | + = help: add `#![feature(const_async_blocks)]` to the crate attributes to enable + +error[E0658]: `async` blocks are not allowed in statics + --> $DIR/async-block.rs:15:51 + | +LL | static _FUT: &(dyn Future + Sync) = &async {}; + | ^^^^^^^^ + | + = help: add `#![feature(const_async_blocks)]` to the crate attributes to enable + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/impl-trait/issues/issue-78721.stderr b/src/test/ui/impl-trait/issues/issue-78721.stderr index 353e882b1af..b6acdfa048f 100644 --- a/src/test/ui/impl-trait/issues/issue-78721.stderr +++ b/src/test/ui/impl-trait/issues/issue-78721.stderr @@ -7,11 +7,13 @@ LL | #![feature(impl_trait_in_bindings)] = note: `#[warn(incomplete_features)]` on by default = note: see issue #63065 for more information -error: `async` blocks are not allowed in constants +error[E0658]: `async` blocks are not allowed in constants --> $DIR/issue-78721.rs:8:57 | LL | let f: impl core::future::Future = async { 1 }; | ^^^^^^^^^^^ + | + = help: add `#![feature(const_async_blocks)]` to the crate attributes to enable error[E0493]: destructors cannot be evaluated at compile-time --> $DIR/issue-78721.rs:8:13 @@ -24,4 +26,5 @@ LL | }], error: aborting due to 2 previous errors; 1 warning emitted -For more information about this error, try `rustc --explain E0493`. +Some errors have detailed explanations: E0493, E0658. +For more information about an error, try `rustc --explain E0493`. diff --git a/src/test/ui/impl-trait/issues/issue-78722.full_tait.stderr b/src/test/ui/impl-trait/issues/issue-78722.full_tait.stderr index d7327aa46bc..f013547782e 100644 --- a/src/test/ui/impl-trait/issues/issue-78722.full_tait.stderr +++ b/src/test/ui/impl-trait/issues/issue-78722.full_tait.stderr @@ -15,11 +15,13 @@ LL | #![feature(impl_trait_in_bindings)] | = note: see issue #63065 for more information -error: `async` blocks are not allowed in constants +error[E0658]: `async` blocks are not allowed in constants --> $DIR/issue-78722.rs:17:20 | LL | let f: F = async { 1 }; | ^^^^^^^^^^^ + | + = help: add `#![feature(const_async_blocks)]` to the crate attributes to enable error[E0493]: destructors cannot be evaluated at compile-time --> $DIR/issue-78722.rs:17:13 @@ -32,4 +34,5 @@ LL | }], error: aborting due to 2 previous errors; 2 warnings emitted -For more information about this error, try `rustc --explain E0493`. +Some errors have detailed explanations: E0493, E0658. +For more information about an error, try `rustc --explain E0493`. diff --git a/src/test/ui/impl-trait/issues/issue-78722.min_tait.stderr b/src/test/ui/impl-trait/issues/issue-78722.min_tait.stderr index 01ec71e7a50..9425bc48d69 100644 --- a/src/test/ui/impl-trait/issues/issue-78722.min_tait.stderr +++ b/src/test/ui/impl-trait/issues/issue-78722.min_tait.stderr @@ -7,11 +7,13 @@ LL | #![feature(impl_trait_in_bindings)] = note: `#[warn(incomplete_features)]` on by default = note: see issue #63065 for more information -error: `async` blocks are not allowed in constants +error[E0658]: `async` blocks are not allowed in constants --> $DIR/issue-78722.rs:17:20 | LL | let f: F = async { 1 }; | ^^^^^^^^^^^ + | + = help: add `#![feature(const_async_blocks)]` to the crate attributes to enable error[E0493]: destructors cannot be evaluated at compile-time --> $DIR/issue-78722.rs:17:13 @@ -24,4 +26,5 @@ LL | }], error: aborting due to 2 previous errors; 1 warning emitted -For more information about this error, try `rustc --explain E0493`. +Some errors have detailed explanations: E0493, E0658. +For more information about an error, try `rustc --explain E0493`. -- cgit 1.4.1-3-g733a5 From 014e8d46f87e746bf9cb9b78c0bcf7e57c2cbc8c Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Sun, 16 May 2021 14:59:32 +0200 Subject: Add tracking issue --- compiler/rustc_feature/src/active.rs | 2 +- src/test/ui/consts/async-block.without_feature.stderr | 2 ++ src/test/ui/impl-trait/issues/issue-78721.stderr | 1 + src/test/ui/impl-trait/issues/issue-78722.full_tait.stderr | 1 + src/test/ui/impl-trait/issues/issue-78722.min_tait.stderr | 1 + 5 files changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/compiler/rustc_feature/src/active.rs b/compiler/rustc_feature/src/active.rs index 78ead47d1ba..f3f9f0cd763 100644 --- a/compiler/rustc_feature/src/active.rs +++ b/compiler/rustc_feature/src/active.rs @@ -651,7 +651,7 @@ declare_features! ( (active, const_fn_unsize, "1.53.0", Some(64992), None), /// Allows `async {}` expressions in const contexts. - (active, const_async_blocks, "1.53.0", None, None), + (active, const_async_blocks, "1.53.0", Some(85368), None), /// Allows using imported `main` function (active, imported_main, "1.53.0", Some(28937), None), diff --git a/src/test/ui/consts/async-block.without_feature.stderr b/src/test/ui/consts/async-block.without_feature.stderr index 93d0fbd3950..751627c5226 100644 --- a/src/test/ui/consts/async-block.without_feature.stderr +++ b/src/test/ui/consts/async-block.without_feature.stderr @@ -4,6 +4,7 @@ error[E0658]: `async` blocks are not allowed in constants LL | const _: i32 = { core::mem::ManuallyDrop::new(async { 0 }); 4 }; | ^^^^^^^^^^^ | + = note: see issue #85368 for more information = help: add `#![feature(const_async_blocks)]` to the crate attributes to enable error[E0658]: `async` blocks are not allowed in statics @@ -12,6 +13,7 @@ error[E0658]: `async` blocks are not allowed in statics LL | static _FUT: &(dyn Future + Sync) = &async {}; | ^^^^^^^^ | + = note: see issue #85368 for more information = help: add `#![feature(const_async_blocks)]` to the crate attributes to enable error: aborting due to 2 previous errors diff --git a/src/test/ui/impl-trait/issues/issue-78721.stderr b/src/test/ui/impl-trait/issues/issue-78721.stderr index b6acdfa048f..d5712dd9200 100644 --- a/src/test/ui/impl-trait/issues/issue-78721.stderr +++ b/src/test/ui/impl-trait/issues/issue-78721.stderr @@ -13,6 +13,7 @@ error[E0658]: `async` blocks are not allowed in constants LL | let f: impl core::future::Future = async { 1 }; | ^^^^^^^^^^^ | + = note: see issue #85368 for more information = help: add `#![feature(const_async_blocks)]` to the crate attributes to enable error[E0493]: destructors cannot be evaluated at compile-time diff --git a/src/test/ui/impl-trait/issues/issue-78722.full_tait.stderr b/src/test/ui/impl-trait/issues/issue-78722.full_tait.stderr index f013547782e..7a4be1d5f6d 100644 --- a/src/test/ui/impl-trait/issues/issue-78722.full_tait.stderr +++ b/src/test/ui/impl-trait/issues/issue-78722.full_tait.stderr @@ -21,6 +21,7 @@ error[E0658]: `async` blocks are not allowed in constants LL | let f: F = async { 1 }; | ^^^^^^^^^^^ | + = note: see issue #85368 for more information = help: add `#![feature(const_async_blocks)]` to the crate attributes to enable error[E0493]: destructors cannot be evaluated at compile-time diff --git a/src/test/ui/impl-trait/issues/issue-78722.min_tait.stderr b/src/test/ui/impl-trait/issues/issue-78722.min_tait.stderr index 9425bc48d69..131033063d2 100644 --- a/src/test/ui/impl-trait/issues/issue-78722.min_tait.stderr +++ b/src/test/ui/impl-trait/issues/issue-78722.min_tait.stderr @@ -13,6 +13,7 @@ error[E0658]: `async` blocks are not allowed in constants LL | let f: F = async { 1 }; | ^^^^^^^^^^^ | + = note: see issue #85368 for more information = help: add `#![feature(const_async_blocks)]` to the crate attributes to enable error[E0493]: destructors cannot be evaluated at compile-time -- cgit 1.4.1-3-g733a5