diff options
| author | 许杰友 Jieyou Xu (Joe) <39484203+jieyouxu@users.noreply.github.com> | 2024-12-19 16:48:07 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-19 16:48:07 +0800 |
| commit | 47e42c8815233080bbe25868e1789fbd1b5cf890 (patch) | |
| tree | 2dca25c8634c96fba22fc9650197aae7e518f4d3 | |
| parent | 3227f35177a6a658226c7345c2fbee56e2fcab04 (diff) | |
| parent | a6cf662f937e302bb4cd0abf10d0a05843323a49 (diff) | |
| download | rust-47e42c8815233080bbe25868e1789fbd1b5cf890.tar.gz rust-47e42c8815233080bbe25868e1789fbd1b5cf890.zip | |
Rollup merge of #133702 - RalfJung:single-variant, r=oli-obk
Variants::Single: do not use invalid VariantIdx for uninhabited enums ~~Stacked on top of https://github.com/rust-lang/rust/pull/133681, only the last commit is new.~~ Currently, `Variants::Single` for an empty enum contains a `VariantIdx` of 0; looking that up in the enum variant list will ICE. That's quite confusing. So let's fix that by adding a new `Variants::Empty` case for types that have 0 variants. try-job: i686-msvc
| -rw-r--r-- | src/discriminant.rs | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/discriminant.rs b/src/discriminant.rs index 45794a42665..4d0d5dc60eb 100644 --- a/src/discriminant.rs +++ b/src/discriminant.rs @@ -18,6 +18,7 @@ pub(crate) fn codegen_set_discriminant<'tcx>( return; } match layout.variants { + Variants::Empty => unreachable!("we already handled uninhabited types"), Variants::Single { index } => { assert_eq!(index, variant_index); } @@ -85,6 +86,7 @@ pub(crate) fn codegen_get_discriminant<'tcx>( } let (tag_scalar, tag_field, tag_encoding) = match &layout.variants { + Variants::Empty => unreachable!("we already handled uninhabited types"), Variants::Single { index } => { let discr_val = layout .ty |
