Skip to content

Commit 6c0dd82

Browse files
authored
Rollup merge of rust-lang#67323 - Centril:tes, r=davidtwco
make transparent enums more ordinary By recognizing that structs & unions have one variant, we can make the treatment of transparent enums less ad-hoc. cc rust-lang#60405 r? @davidtwco
2 parents c2f0498 + 5d73af2 commit 6c0dd82

File tree

1 file changed

+17
-18
lines changed
  • src/librustc_typeck/check

1 file changed

+17
-18
lines changed

src/librustc_typeck/check/mod.rs

+17-18
Original file line numberDiff line numberDiff line change
@@ -2330,7 +2330,7 @@ fn bad_variant_count<'tcx>(tcx: TyCtxt<'tcx>, adt: &'tcx ty::AdtDef, sp: Span, d
23302330
);
23312331
let mut err = struct_span_err!(tcx.sess, sp, E0731, "transparent enum {}", msg);
23322332
err.span_label(sp, &msg);
2333-
if let &[ref start @ .., ref end] = &variant_spans[..] {
2333+
if let [start @ .., end] = &*variant_spans {
23342334
for variant_span in start {
23352335
err.span_label(*variant_span, "");
23362336
}
@@ -2372,23 +2372,14 @@ fn check_transparent(tcx: TyCtxt<'_>, sp: Span, def_id: DefId) {
23722372
}
23732373
let sp = tcx.sess.source_map().def_span(sp);
23742374

2375-
if adt.is_enum() {
2376-
if !tcx.features().transparent_enums {
2377-
feature_err(
2378-
&tcx.sess.parse_sess,
2379-
sym::transparent_enums,
2380-
sp,
2381-
"transparent enums are unstable",
2382-
)
2383-
.emit();
2384-
}
2385-
if adt.variants.len() != 1 {
2386-
bad_variant_count(tcx, adt, sp, def_id);
2387-
if adt.variants.is_empty() {
2388-
// Don't bother checking the fields. No variants (and thus no fields) exist.
2389-
return;
2390-
}
2391-
}
2375+
if adt.is_enum() && !tcx.features().transparent_enums {
2376+
feature_err(
2377+
&tcx.sess.parse_sess,
2378+
sym::transparent_enums,
2379+
sp,
2380+
"transparent enums are unstable",
2381+
)
2382+
.emit();
23922383
}
23932384

23942385
if adt.is_union() && !tcx.features().transparent_unions {
@@ -2401,6 +2392,14 @@ fn check_transparent(tcx: TyCtxt<'_>, sp: Span, def_id: DefId) {
24012392
.emit();
24022393
}
24032394

2395+
if adt.variants.len() != 1 {
2396+
bad_variant_count(tcx, adt, sp, def_id);
2397+
if adt.variants.is_empty() {
2398+
// Don't bother checking the fields. No variants (and thus no fields) exist.
2399+
return;
2400+
}
2401+
}
2402+
24042403
// For each field, figure out if it's known to be a ZST and align(1)
24052404
let field_infos = adt.all_fields().map(|field| {
24062405
let ty = field.ty(tcx, InternalSubsts::identity_for_item(tcx, field.did));

0 commit comments

Comments
 (0)