From d32dd9e452b1575d9a93830e194c1d0133844327 Mon Sep 17 00:00:00 2001 From: khyperia <953151+khyperia@users.noreply.github.com> Date: Fri, 18 Sep 2026 08:25:39 +0200 Subject: [PATCH] gca: fix unreachable --- .../rustc_mir_build/src/builder/expr/as_constant.rs | 7 +++---- .../gca/const-reference-to-constructor.rs | 10 ++++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 tests/ui/const-generics/gca/const-reference-to-constructor.rs diff --git a/compiler/rustc_mir_build/src/builder/expr/as_constant.rs b/compiler/rustc_mir_build/src/builder/expr/as_constant.rs index eb9f56d887684..7592c48c3a35c 100644 --- a/compiler/rustc_mir_build/src/builder/expr/as_constant.rs +++ b/compiler/rustc_mir_build/src/builder/expr/as_constant.rs @@ -80,9 +80,8 @@ pub(crate) fn as_constant_inner<'tcx>( // FIXME(generic_const_args): there's a lot to consider here! `Const::Ty` uses valtrees // and `Const::Unevaluated` does not, we should revisit this before stabilization. let def_kind = tcx.def_kind(def_id); - if tcx.features().generic_const_args() - || matches!(def_kind, DefKind::Const | DefKind::AssocConst) - && tcx.is_direct_const(def_id) + if matches!(def_kind, DefKind::Const | DefKind::AssocConst) + && (tcx.features().generic_const_args() || tcx.is_direct_const(def_id)) { let kind = match def_kind { DefKind::AssocConst => { @@ -94,7 +93,7 @@ pub(crate) fn as_constant_inner<'tcx>( } } DefKind::Const => ty::AliasConstKind::Free { def_id }, - _ => unreachable!(), + kind => bug!("unexpected DefKind in THIR ExprKind::NamedConst: {kind:?}"), }; let alias = ty::AliasConst::new(tcx, kind, args); let ct = ty::Const::new_alias(tcx, ty::IsRigid::No, alias); diff --git a/tests/ui/const-generics/gca/const-reference-to-constructor.rs b/tests/ui/const-generics/gca/const-reference-to-constructor.rs new file mode 100644 index 0000000000000..bafaf9f532545 --- /dev/null +++ b/tests/ui/const-generics/gca/const-reference-to-constructor.rs @@ -0,0 +1,10 @@ +//@ check-pass +//@ compile-flags: -Znext-solver +//! https://github.com/rust-lang/rust/issues/162923 +#![feature(min_generic_const_args)] +#![feature(generic_const_args)] +enum T::B as u8 }> { + A = 2, + B, +} +fn main() {}