Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit fa08c41

Browse files
committedDec 1, 2024·
make no-variant types a dedicated Variants variant
1 parent 2b6afa6 commit fa08c41

File tree

53 files changed

+240
-486
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+240
-486
lines changed
 

‎compiler/rustc_abi/src/callconv.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ impl<'a, Ty> TyAndLayout<'a, Ty> {
206206
let (mut result, mut total) = from_fields_at(*self, Size::ZERO)?;
207207

208208
match &self.variants {
209-
abi::Variants::Single { .. } => {}
209+
abi::Variants::Single { .. } | abi::Variants::Empty => {}
210210
abi::Variants::Multiple { variants, .. } => {
211211
// Treat enum variants like union members.
212212
// HACK(eddyb) pretend the `enum` field (discriminant)

‎compiler/rustc_abi/src/layout.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
120120
.max_by_key(|niche| niche.available(dl));
121121

122122
LayoutData {
123-
variants: Variants::Single { index: Some(VariantIdx::new(0)) },
123+
variants: Variants::Single { index: VariantIdx::new(0) },
124124
fields: FieldsShape::Arbitrary {
125125
offsets: [Size::ZERO, b_offset].into(),
126126
memory_index: [0, 1].into(),
@@ -213,8 +213,9 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
213213
&self,
214214
) -> LayoutData<FieldIdx, VariantIdx> {
215215
let dl = self.cx.data_layout();
216+
// This is also used for uninhabited enums, so we use `Variants::Empty`.
216217
LayoutData {
217-
variants: Variants::Single { index: None },
218+
variants: Variants::Empty,
218219
fields: FieldsShape::Primitive,
219220
backend_repr: BackendRepr::Uninhabited,
220221
largest_niche: None,
@@ -385,7 +386,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
385386
};
386387

387388
Ok(LayoutData {
388-
variants: Variants::Single { index: Some(only_variant_idx) },
389+
variants: Variants::Single { index: only_variant_idx },
389390
fields: FieldsShape::Union(union_field_count),
390391
backend_repr: abi,
391392
largest_niche: None,
@@ -424,7 +425,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
424425
};
425426

426427
let mut st = self.univariant(&variants[v], repr, kind)?;
427-
st.variants = Variants::Single { index: Some(v) };
428+
st.variants = Variants::Single { index: v };
428429

429430
if is_unsafe_cell {
430431
let hide_niches = |scalar: &mut _| match scalar {
@@ -543,7 +544,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
543544
.iter_enumerated()
544545
.map(|(j, v)| {
545546
let mut st = self.univariant(v, repr, StructKind::AlwaysSized).ok()?;
546-
st.variants = Variants::Single { index: Some(j) };
547+
st.variants = Variants::Single { index: j };
547548

548549
align = align.max(st.align);
549550
max_repr_align = max_repr_align.max(st.max_repr_align);
@@ -736,7 +737,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
736737
repr,
737738
StructKind::Prefixed(min_ity.size(), prefix_align),
738739
)?;
739-
st.variants = Variants::Single { index: Some(i) };
740+
st.variants = Variants::Single { index: i };
740741
// Find the first field we can't move later
741742
// to make room for a larger discriminant.
742743
for field_idx in st.fields.index_by_increasing_offset() {
@@ -1004,8 +1005,8 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
10041005
Variants::Multiple { tag, tag_encoding, tag_field, .. } => {
10051006
Variants::Multiple { tag, tag_encoding, tag_field, variants: best_layout.variants }
10061007
}
1007-
Variants::Single { .. } => {
1008-
panic!("encountered a single-variant enum during multi-variant layout")
1008+
Variants::Single { .. } | Variants::Empty => {
1009+
panic!("encountered a single-variant or empty enum during multi-variant layout")
10091010
}
10101011
};
10111012
Ok(best_layout.layout)
@@ -1344,7 +1345,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
13441345
};
13451346

13461347
Ok(LayoutData {
1347-
variants: Variants::Single { index: Some(VariantIdx::new(0)) },
1348+
variants: Variants::Single { index: VariantIdx::new(0) },
13481349
fields: FieldsShape::Arbitrary { offsets, memory_index },
13491350
backend_repr: abi,
13501351
largest_niche,

0 commit comments

Comments
 (0)
Please sign in to comment.