Rollup merge of #118974 - workingjubilee:why-worry-about-enum-abi, r=davidtwco
Annotate panic! reasons during enum layout Add some reasons to the panics, and use more exhaustive matches. Also see: #118955
This commit is contained in:
commit
88a9619d74
@ -382,7 +382,7 @@ struct TmpLayout<FieldIdx: Idx, VariantIdx: Idx> {
|
||||
*offset += this_offset;
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
FieldsShape::Primitive | FieldsShape::Array { .. } | FieldsShape::Union(..) => {
|
||||
panic!("Layout of fields should be Arbitrary for variants")
|
||||
}
|
||||
}
|
||||
@ -600,7 +600,9 @@ struct TmpLayout<FieldIdx: Idx, VariantIdx: Idx> {
|
||||
variant.size = new_ity_size;
|
||||
}
|
||||
}
|
||||
_ => panic!(),
|
||||
FieldsShape::Primitive | FieldsShape::Array { .. } | FieldsShape::Union(..) => {
|
||||
panic!("encountered a non-arbitrary layout during enum layout")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -628,7 +630,7 @@ struct TmpLayout<FieldIdx: Idx, VariantIdx: Idx> {
|
||||
let mut common_prim_initialized_in_all_variants = true;
|
||||
for (field_layouts, layout_variant) in iter::zip(variants, &layout_variants) {
|
||||
let FieldsShape::Arbitrary { ref offsets, .. } = layout_variant.fields else {
|
||||
panic!();
|
||||
panic!("encountered a non-arbitrary layout during enum layout");
|
||||
};
|
||||
// We skip *all* ZST here and later check if we are good in terms of alignment.
|
||||
// This lets us handle some cases involving aligned ZST.
|
||||
@ -681,7 +683,7 @@ struct TmpLayout<FieldIdx: Idx, VariantIdx: Idx> {
|
||||
assert_eq!(memory_index.raw, [0, 1]);
|
||||
offsets
|
||||
}
|
||||
_ => panic!(),
|
||||
_ => panic!("encountered a non-arbitrary layout during enum layout"),
|
||||
};
|
||||
if pair_offsets[FieldIdx::new(0)] == Size::ZERO
|
||||
&& pair_offsets[FieldIdx::new(1)] == *offset
|
||||
@ -758,7 +760,9 @@ struct TmpLayout<FieldIdx: Idx, VariantIdx: Idx> {
|
||||
Variants::Multiple { tag, tag_encoding, tag_field, .. } => {
|
||||
Variants::Multiple { tag, tag_encoding, tag_field, variants: best_layout.variants }
|
||||
}
|
||||
_ => panic!(),
|
||||
Variants::Single { .. } => {
|
||||
panic!("encountered a single-variant enum during multi-variant layout")
|
||||
}
|
||||
};
|
||||
Some(best_layout.layout)
|
||||
}
|
||||
@ -1154,7 +1158,11 @@ fn univariant<
|
||||
assert_eq!(memory_index.raw, [0, 1]);
|
||||
offsets
|
||||
}
|
||||
_ => panic!(),
|
||||
FieldsShape::Primitive
|
||||
| FieldsShape::Array { .. }
|
||||
| FieldsShape::Union(..) => {
|
||||
panic!("encountered a non-arbitrary layout during enum layout")
|
||||
}
|
||||
};
|
||||
if offsets[i] == pair_offsets[FieldIdx::new(0)]
|
||||
&& offsets[j] == pair_offsets[FieldIdx::new(1)]
|
||||
|
Loading…
Reference in New Issue
Block a user