about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEric Holk <ericholk@microsoft.com>2023-11-29 14:13:35 -0800
committerEric Holk <ericholk@microsoft.com>2023-12-04 11:23:06 -0800
commit7c43784cb07a2e9006acc6f230df27dd28d88dab (patch)
treecd20bc19255a6ffb4efd3c1dec745ae345a41b6f
parentc104f3b629cfcac35802a899478756abf24ee7c1 (diff)
downloadrust-7c43784cb07a2e9006acc6f230df27dd28d88dab.tar.gz
rust-7c43784cb07a2e9006acc6f230df27dd28d88dab.zip
gate gen fn behind gen_blocks
-rw-r--r--compiler/rustc_parse/src/parser/item.rs4
-rw-r--r--tests/ui/coroutine/gen_fn.e2024.stderr6
-rw-r--r--tests/ui/coroutine/gen_fn.rs2
3 files changed, 9 insertions, 3 deletions
diff --git a/compiler/rustc_parse/src/parser/item.rs b/compiler/rustc_parse/src/parser/item.rs
index 4f01ab02c04..766ec50e75b 100644
--- a/compiler/rustc_parse/src/parser/item.rs
+++ b/compiler/rustc_parse/src/parser/item.rs
@@ -2410,6 +2410,10 @@ impl<'a> Parser<'a> {
             }
         }
 
+        if let Gen::Yes { span, .. } = genness {
+            self.sess.gated_spans.gate(sym::gen_blocks, span);
+        }
+
         if !self.eat_keyword_case(kw::Fn, case) {
             // It is possible for `expect_one_of` to recover given the contents of
             // `self.expected_tokens`, therefore, do not use `self.unexpected()` which doesn't
diff --git a/tests/ui/coroutine/gen_fn.e2024.stderr b/tests/ui/coroutine/gen_fn.e2024.stderr
index 928c16f57a2..9ad890af3e1 100644
--- a/tests/ui/coroutine/gen_fn.e2024.stderr
+++ b/tests/ui/coroutine/gen_fn.e2024.stderr
@@ -1,10 +1,12 @@
-error: `gen` functions are not yet implemented
+error[E0658]: gen blocks are experimental
   --> $DIR/gen_fn.rs:4:1
    |
 LL | gen fn foo() {}
    | ^^^
    |
-   = help: for now you can use `gen {}` blocks and return `impl Iterator` instead
+   = note: see issue #117078 <https://github.com/rust-lang/rust/issues/117078> for more information
+   = help: add `#![feature(gen_blocks)]` to the crate attributes to enable
 
 error: aborting due to 1 previous error
 
+For more information about this error, try `rustc --explain E0658`.
diff --git a/tests/ui/coroutine/gen_fn.rs b/tests/ui/coroutine/gen_fn.rs
index da515f263b0..e06629c5dfe 100644
--- a/tests/ui/coroutine/gen_fn.rs
+++ b/tests/ui/coroutine/gen_fn.rs
@@ -3,6 +3,6 @@
 
 gen fn foo() {}
 //[none]~^ ERROR: expected one of `#`, `async`, `const`, `default`, `extern`, `fn`, `pub`, `unsafe`, or `use`, found `gen`
-//[e2024]~^^ ERROR: `gen` functions are not yet implemented
+//[e2024]~^^ ERROR: gen blocks are experimental
 
 fn main() {}