diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 30a603ac3bd..bc87a88f9f1 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -2068,6 +2068,9 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> { if block.is_none() { self.check_abi(sig.header.abi, ti.span); } + if sig.header.asyncness.node.is_async() { + gate_feature_post!(&self, async_await, ti.span, "async fn is unstable"); + } if sig.decl.c_variadic { gate_feature_post!(&self, c_variadic, ti.span, "C-variadic functions are unstable"); diff --git a/src/test/ui/feature-gates/feature-gate-async-await.rs b/src/test/ui/feature-gates/feature-gate-async-await.rs index f06b0b36395..1fdaec75e9d 100644 --- a/src/test/ui/feature-gates/feature-gate-async-await.rs +++ b/src/test/ui/feature-gates/feature-gate-async-await.rs @@ -8,6 +8,11 @@ impl S { async fn foo() {} //~ ERROR async fn is unstable } +trait T { + async fn foo(); //~ ERROR trait fns cannot be declared `async` + //~^ ERROR async fn is unstable +} + async fn foo() {} //~ ERROR async fn is unstable fn main() { diff --git a/src/test/ui/feature-gates/feature-gate-async-await.stderr b/src/test/ui/feature-gates/feature-gate-async-await.stderr index 41325638422..3f6731f47df 100644 --- a/src/test/ui/feature-gates/feature-gate-async-await.stderr +++ b/src/test/ui/feature-gates/feature-gate-async-await.stderr @@ -1,3 +1,9 @@ +error[E0706]: trait fns cannot be declared `async` + --> $DIR/feature-gate-async-await.rs:12:5 + | +LL | async fn foo(); + | ^^^^^^^^^^^^^^^ + error[E0658]: async fn is unstable --> $DIR/feature-gate-async-await.rs:8:5 | @@ -8,7 +14,16 @@ LL | async fn foo() {} = help: add #![feature(async_await)] to the crate attributes to enable error[E0658]: async fn is unstable - --> $DIR/feature-gate-async-await.rs:11:1 + --> $DIR/feature-gate-async-await.rs:12:5 + | +LL | async fn foo(); + | ^^^^^^^^^^^^^^^ + | + = note: for more information, see https://github.com/rust-lang/rust/issues/50547 + = help: add #![feature(async_await)] to the crate attributes to enable + +error[E0658]: async fn is unstable + --> $DIR/feature-gate-async-await.rs:16:1 | LL | async fn foo() {} | ^^^^^^^^^^^^^^^^^ @@ -17,7 +32,7 @@ LL | async fn foo() {} = help: add #![feature(async_await)] to the crate attributes to enable error[E0658]: async blocks are unstable - --> $DIR/feature-gate-async-await.rs:14:13 + --> $DIR/feature-gate-async-await.rs:19:13 | LL | let _ = async {}; | ^^^^^^^^ @@ -26,7 +41,7 @@ LL | let _ = async {}; = help: add #![feature(async_await)] to the crate attributes to enable error[E0658]: async closures are unstable - --> $DIR/feature-gate-async-await.rs:15:13 + --> $DIR/feature-gate-async-await.rs:20:13 | LL | let _ = async || {}; | ^^^^^^^^^^^ @@ -34,6 +49,7 @@ LL | let _ = async || {}; = note: for more information, see https://github.com/rust-lang/rust/issues/50547 = help: add #![feature(async_await)] to the crate attributes to enable -error: aborting due to 4 previous errors +error: aborting due to 6 previous errors -For more information about this error, try `rustc --explain E0658`. +Some errors occurred: E0658, E0706. +For more information about an error, try `rustc --explain E0658`.