about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform
diff options
context:
space:
mode:
authorDianQK <dianqk@dianqk.net>2024-02-14 12:09:28 +0800
committerDianQK <dianqk@dianqk.net>2024-03-07 22:58:51 +0800
commit3d7f8b4e5b650efc628de9bf4bd5246d3493d261 (patch)
treea549fd0c67ac6dc0e3291d130211f92c2804ea66 /compiler/rustc_mir_transform
parent08ae8380ce75b4a19c4a7bfa33eac8776daef532 (diff)
downloadrust-3d7f8b4e5b650efc628de9bf4bd5246d3493d261.tar.gz
rust-3d7f8b4e5b650efc628de9bf4bd5246d3493d261.zip
Get all variants to eliminate the default branching if we cannot get the layout of type
Diffstat (limited to 'compiler/rustc_mir_transform')
-rw-r--r--compiler/rustc_mir_transform/src/uninhabited_enum_branching.rs6
1 files changed, 6 insertions, 0 deletions
diff --git a/compiler/rustc_mir_transform/src/uninhabited_enum_branching.rs b/compiler/rustc_mir_transform/src/uninhabited_enum_branching.rs
index d3408d4882f..0ab60259732 100644
--- a/compiler/rustc_mir_transform/src/uninhabited_enum_branching.rs
+++ b/compiler/rustc_mir_transform/src/uninhabited_enum_branching.rs
@@ -95,6 +95,12 @@ impl<'tcx> MirPass<'tcx> for UninhabitedEnumBranching {
 
             let mut allowed_variants = if let Ok(layout) = layout {
                 variant_discriminants(&layout, discriminant_ty, tcx)
+            } else if let Some(variant_range) = discriminant_ty.variant_range(tcx) {
+                variant_range
+                    .map(|variant| {
+                        discriminant_ty.discriminant_for_variant(tcx, variant).unwrap().val
+                    })
+                    .collect()
             } else {
                 continue;
             };