Variants::Single: do not use invalid VariantIdx for uninhabited enums

This commit is contained in:
Ralf Jung 2024-12-01 13:12:43 +01:00
parent 37e74596c0
commit 21de42bf8d
47 changed files with 549 additions and 281 deletions

View file

@ -19,7 +19,7 @@ pub(crate) fn codegen_set_discriminant<'tcx>(
}
match layout.variants {
Variants::Single { index } => {
assert_eq!(index, variant_index);
assert_eq!(index.unwrap(), variant_index);
}
Variants::Multiple {
tag: _,
@ -86,9 +86,10 @@ pub(crate) fn codegen_get_discriminant<'tcx>(
let (tag_scalar, tag_field, tag_encoding) = match &layout.variants {
Variants::Single { index } => {
let index = index.unwrap();
let discr_val = layout
.ty
.discriminant_for_variant(fx.tcx, *index)
.discriminant_for_variant(fx.tcx, index)
.map_or(u128::from(index.as_u32()), |discr| discr.val);
let val = match dest_layout.ty.kind() {