Skip to content

Commit 9c18fdc

Browse files
authored
Rollup merge of #99786 - obeis:issue-99625, r=compiler-errors
Recover from C++ style `enum struct` Closes #99625
2 parents 0de7f75 + 0ad06f1 commit 9c18fdc

4 files changed

+53
-0
lines changed

compiler/rustc_parse/src/parser/item.rs

+19
Original file line numberDiff line numberDiff line change
@@ -1216,6 +1216,25 @@ impl<'a> Parser<'a> {
12161216

12171217
/// Parses an enum declaration.
12181218
fn parse_item_enum(&mut self) -> PResult<'a, ItemInfo> {
1219+
if self.token.is_keyword(kw::Struct) {
1220+
let mut err = self.struct_span_err(
1221+
self.prev_token.span.to(self.token.span),
1222+
"`enum` and `struct` are mutually exclusive",
1223+
);
1224+
err.span_suggestion(
1225+
self.prev_token.span.to(self.token.span),
1226+
"replace `enum struct` with",
1227+
"enum",
1228+
Applicability::MachineApplicable,
1229+
);
1230+
if self.look_ahead(1, |t| t.is_ident()) {
1231+
self.bump();
1232+
err.emit();
1233+
} else {
1234+
return Err(err);
1235+
}
1236+
}
1237+
12191238
let id = self.parse_ident()?;
12201239
let mut generics = self.parse_generics()?;
12211240
generics.where_clause = self.parse_where_clause()?;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// run-rustfix
2+
3+
pub enum Range {
4+
//~^ ERROR `enum` and `struct` are mutually exclusive
5+
Valid {
6+
begin: u32,
7+
len: u32,
8+
},
9+
Out,
10+
}
11+
12+
fn main() {
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// run-rustfix
2+
3+
pub enum struct Range {
4+
//~^ ERROR `enum` and `struct` are mutually exclusive
5+
Valid {
6+
begin: u32,
7+
len: u32,
8+
},
9+
Out,
10+
}
11+
12+
fn main() {
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
error: `enum` and `struct` are mutually exclusive
2+
--> $DIR/issue-99625-enum-struct-mutually-exclusive.rs:3:5
3+
|
4+
LL | pub enum struct Range {
5+
| ^^^^^^^^^^^ help: replace `enum struct` with: `enum`
6+
7+
error: aborting due to previous error
8+

0 commit comments

Comments
 (0)