Skip to content

Commit c858ce1

Browse files
committed
make no-variant types a dedicated Variants variant
1 parent d7d08ae commit c858ce1

File tree

3 files changed

+10
-9
lines changed

3 files changed

+10
-9
lines changed

crates/hir-ty/src/layout.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ fn layout_of_simd_ty(
189189
};
190190

191191
Ok(Arc::new(Layout {
192-
variants: Variants::Single { index: Some(struct_variant_idx()) },
192+
variants: Variants::Single { index: struct_variant_idx() },
193193
fields,
194194
backend_repr: BackendRepr::Vector { element: e_abi, count: e_len },
195195
largest_niche: e_ly.largest_niche,
@@ -305,7 +305,7 @@ pub fn layout_of_ty_query(
305305
let largest_niche = if count != 0 { element.largest_niche } else { None };
306306

307307
Layout {
308-
variants: Variants::Single { index: Some(struct_variant_idx()) },
308+
variants: Variants::Single { index: struct_variant_idx() },
309309
fields: FieldsShape::Array { stride: element.size, count },
310310
backend_repr,
311311
largest_niche,
@@ -318,7 +318,7 @@ pub fn layout_of_ty_query(
318318
TyKind::Slice(element) => {
319319
let element = db.layout_of_ty(element.clone(), trait_env)?;
320320
Layout {
321-
variants: Variants::Single { index: Some(struct_variant_idx()) },
321+
variants: Variants::Single { index: struct_variant_idx() },
322322
fields: FieldsShape::Array { stride: element.size, count: 0 },
323323
backend_repr: BackendRepr::Memory { sized: false },
324324
largest_niche: None,
@@ -329,7 +329,7 @@ pub fn layout_of_ty_query(
329329
}
330330
}
331331
TyKind::Str => Layout {
332-
variants: Variants::Single { index: Some(struct_variant_idx()) },
332+
variants: Variants::Single { index: struct_variant_idx() },
333333
fields: FieldsShape::Array { stride: Size::from_bytes(1), count: 0 },
334334
backend_repr: BackendRepr::Memory { sized: false },
335335
largest_niche: None,

crates/hir-ty/src/mir/eval.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -813,7 +813,7 @@ impl Evaluator<'_> {
813813
ProjectionElem::Field(Either::Left(f)) => {
814814
let layout = self.layout(&prev_ty)?;
815815
let variant_layout = match &layout.variants {
816-
Variants::Single { .. } => &layout,
816+
Variants::Single { .. } | Variants::Empty => &layout,
817817
Variants::Multiple { variants, .. } => {
818818
&variants[match f.parent {
819819
hir_def::VariantId::EnumVariantId(it) => {
@@ -1638,9 +1638,9 @@ impl Evaluator<'_> {
16381638
return Ok(0);
16391639
};
16401640
match &layout.variants {
1641+
Variants::Empty => unreachable!(),
16411642
Variants::Single { index } => {
1642-
let r = self
1643-
.const_eval_discriminant(self.db.enum_data(e).variants[index.unwrap().0].0)?;
1643+
let r = self.const_eval_discriminant(self.db.enum_data(e).variants[index.0].0)?;
16441644
Ok(r)
16451645
}
16461646
Variants::Multiple { tag, tag_encoding, variants, .. } => {
@@ -1801,7 +1801,7 @@ impl Evaluator<'_> {
18011801
}
18021802
let layout = self.layout_adt(adt, subst)?;
18031803
Ok(match &layout.variants {
1804-
Variants::Single { .. } => (layout.size.bytes_usize(), layout, None),
1804+
Variants::Single { .. } | Variants::Empty => (layout.size.bytes_usize(), layout, None),
18051805
Variants::Multiple { variants, tag, tag_encoding, .. } => {
18061806
let enum_variant_id = match it {
18071807
VariantId::EnumVariantId(it) => it,

crates/hir-ty/src/utils.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,8 +334,9 @@ pub(crate) fn detect_variant_from_bytes<'a>(
334334
e: EnumId,
335335
) -> Option<(EnumVariantId, &'a Layout)> {
336336
let (var_id, var_layout) = match &layout.variants {
337+
hir_def::layout::Variants::Empty => unreachable!(),
337338
hir_def::layout::Variants::Single { index } => {
338-
(db.enum_data(e).variants[index.unwrap().0].0, layout)
339+
(db.enum_data(e).variants[index.0].0, layout)
339340
}
340341
hir_def::layout::Variants::Multiple { tag, tag_encoding, variants, .. } => {
341342
let size = tag.size(target_data_layout).bytes_usize();

0 commit comments

Comments
 (0)