Rollup merge of #67078 - kamleshbhalui:master, r=Centril
accept union inside enum if not followed by identifier Fixes #66943
This commit is contained in:
commit
18a79e0e16
@ -1727,9 +1727,10 @@ impl<'a> Parser<'a> {
|
||||
/// Checks if current token is one of tokens which cannot be nested like `kw::Enum`. In case
|
||||
/// it is, we try to parse the item and report error about nested types.
|
||||
fn recover_nested_adt_item(&mut self, keyword: Symbol) -> PResult<'a, bool> {
|
||||
if self.token.is_keyword(kw::Enum) ||
|
||||
if (self.token.is_keyword(kw::Enum) ||
|
||||
self.token.is_keyword(kw::Struct) ||
|
||||
self.token.is_keyword(kw::Union)
|
||||
self.token.is_keyword(kw::Union))
|
||||
&& self.look_ahead(1, |t| t.is_ident())
|
||||
{
|
||||
let kw_token = self.token.clone();
|
||||
let kw_str = pprust::token_to_string(&kw_token);
|
||||
|
13
src/test/ui/enum/union-in-enum.rs
Normal file
13
src/test/ui/enum/union-in-enum.rs
Normal file
@ -0,0 +1,13 @@
|
||||
// This test checks that the union keyword
|
||||
// is accepted as the name of an enum variant
|
||||
// when not followed by an identifier
|
||||
// This special case exists because `union` is a contextual keyword.
|
||||
|
||||
#![allow(warnings)]
|
||||
|
||||
// check-pass
|
||||
|
||||
enum A { union }
|
||||
enum B { union {} }
|
||||
enum C { union() }
|
||||
fn main(){}
|
Loading…
x
Reference in New Issue
Block a user