From f29b36d03ecf9986ac6c47385ff9390c9a2390e6 Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Wed, 29 Nov 2023 16:59:06 -0800 Subject: Make async gen fn an error --- compiler/rustc_parse/src/errors.rs | 7 +++++++ compiler/rustc_parse/src/parser/item.rs | 6 ++++++ 2 files changed, 13 insertions(+) (limited to 'compiler/rustc_parse/src') diff --git a/compiler/rustc_parse/src/errors.rs b/compiler/rustc_parse/src/errors.rs index 03e047b297d..4bd7c99de9a 100644 --- a/compiler/rustc_parse/src/errors.rs +++ b/compiler/rustc_parse/src/errors.rs @@ -562,6 +562,13 @@ pub(crate) struct GenFn { pub span: Span, } +#[derive(Diagnostic)] +#[diag(parse_async_gen_fn)] +pub(crate) struct AsyncGenFn { + #[primary_span] + pub span: Span, +} + #[derive(Diagnostic)] #[diag(parse_comma_after_base_struct)] #[note] diff --git a/compiler/rustc_parse/src/parser/item.rs b/compiler/rustc_parse/src/parser/item.rs index 766ec50e75b..c6d1ea882e9 100644 --- a/compiler/rustc_parse/src/parser/item.rs +++ b/compiler/rustc_parse/src/parser/item.rs @@ -2414,6 +2414,12 @@ impl<'a> Parser<'a> { self.sess.gated_spans.gate(sym::gen_blocks, span); } + if let (Async::Yes { span: async_span, .. }, Gen::Yes { span: gen_span, .. }) = + (asyncness, genness) + { + self.sess.emit_err(errors::AsyncGenFn { span: async_span.to(gen_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 -- cgit 1.4.1-3-g733a5