Skip to content

Commit

Permalink
Don't ICE on anonymous struct in enum variant
Browse files Browse the repository at this point in the history
  • Loading branch information
clubby789 committed Feb 22, 2024
1 parent 1bb3a9f commit a7635b8
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 1 deletion.
8 changes: 7 additions & 1 deletion compiler/rustc_hir_analysis/src/collect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1025,7 +1025,13 @@ fn adt_def(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::AdtDef<'_> {

let is_anonymous = item.ident.name == kw::Empty;
let repr = if is_anonymous {
tcx.adt_def(tcx.local_parent(def_id)).repr()
let parent = tcx.local_parent(def_id);
if matches!(tcx.hir_node_by_def_id(parent), Node::Item(_)) {
tcx.adt_def(tcx.local_parent(def_id)).repr()
} else {
tcx.dcx().span_delayed_bug(item.span, "anonymous field inside non struct/union");
tcx.repr_options_of_def(def_id.to_def_id())
}
} else {
tcx.repr_options_of_def(def_id.to_def_id())
};
Expand Down
11 changes: 11 additions & 0 deletions tests/ui/union/unnamed-fields/anon-struct-in-enum-issue-121446.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#![crate_type = "lib"]
#![feature(unnamed_fields)]
#![allow(unused, incomplete_features)]

enum K {
M {
_ : struct { field: u8 },
//~^ error: unnamed fields are not allowed outside of structs or unions
//~| error: anonymous structs are not allowed outside of unnamed struct or union fields
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
error: unnamed fields are not allowed outside of structs or unions
--> $DIR/anon-struct-in-enum-issue-121446.rs:7:9
|
LL | _ : struct { field: u8 },
| -^^^^^^^^^^^^^^^^^^^^^^^
| |
| unnamed field declared here

error: anonymous structs are not allowed outside of unnamed struct or union fields
--> $DIR/anon-struct-in-enum-issue-121446.rs:7:13
|
LL | _ : struct { field: u8 },
| ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here

error: aborting due to 2 previous errors

0 comments on commit a7635b8

Please sign in to comment.