Repository: rust
Issue: ICE: `Invalid 'Const' during codegen: UnevaluatedConst {..}`
Labels: A-debuginfo,I-ICE,T-compiler,C-bug,F-generic_const_exprs,F-generic_arg_infer

<!--
[31mICE[0m: Rustc ./2.rs '-Zincremental-verify-ich=yes -Cincremental=<dir> -Cdebuginfo=2 -Clink-dead-code=true -Zvalidate-mir --edition=2021' 'error: internal compiler error: compiler/rustc_codegen_ssa/src/debuginfo/type_names.rs:739:14: Invalid `Const` during codegen: UnevaluatedConst { def: DefId(0:38 ~ 2[dd6c]::zpk2tf_st::{constant#1}), args: [(Mul: (4_usize: usize), (2_usize: usize))] }', 'error: internal compiler error: compiler/rustc_codegen_ssa/src/debuginfo/type_names.rs:739:14: Invalid `Const` during codegen: UnevaluatedConst { def: DefId(0:38 ~ 2[dd6c]::zpk2tf_st::{constant#1}), args: [(Mul: (4_usize: usize), (2_usize: usize))] }'
File: /tmp/im/2.rs
-->

auto-reduced (treereduce-rust):
````rust
#![feature(generic_const_exprs, generic_arg_infer)]

use core::mem::MaybeUninit;

pub struct Arr<T, const N: usize> {
    v: [MaybeUninit<T>; N],
}

impl<T, const N: usize> Arr<T, N> {
    const ELEM: MaybeUninit<T> = MaybeUninit::uninit();
    const INIT: [MaybeUninit<T>; N] = [Self::ELEM; N];

    fn new() -> Self {
        Arr { v: Self::INIT }
    }
}

pub struct BaFormatFilter<const N: usize> {}

pub enum DigitalFilter<const N: usize>
where
    [(); N * 2 + 1]: Sized,
    [(); N * 2]: Sized,
{
    Ba(BaFormatFilter<{ N * 2 + 1 }>),
}

pub fn iirfilter_st_copy<const N: usize, const M: usize>(_: [f32; M]) -> DigitalFilter<N>
where
    [(); N * 2 + 1]: Sized,
    [(); N * 2]: Sized,
{
    let zpk = zpk2tf_st(&Arr::<f32, { N * 2 }>::new(), &Arr::<f32, { N * 2 }>::new());
    DigitalFilter::Ba(zpk)
}

pub fn zpk2tf_st<const N: usize>(_z: &Arr<f32, N>, _p: &Arr<f32, N>) -> BaFormatFilter<{ N + 1 }> {
    BaFormatFilter {}
}

fn main() {
    iirfilter_st_copy::<4, 2>([10., 50.]);
}


````

<details><summary><strong>original code</strong></summary>
<p>

original:
````rust
// issue: rust-lang/rust#106423
// ICE collection encountered polymorphic constant: UnevaluatedConst {..}
//@ edition:2021
//@ check-pass

#![feature(generic_const_exprs, generic_arg_infer)]
#![allow(incomplete_features)]
#![allow(unused)]

use core::mem::MaybeUninit;

pub struct Arr<T, const N: usize> {
    v: [MaybeUninit<T>; N],
}

impl<T, const N: usize> Arr<T, N> {
    const ELEM: MaybeUninit<T> = MaybeUninit::uninit();
    const INIT: [MaybeUninit<T>; N] = [Self::ELEM; N]; // important for optimization of `new`

    fn new() -> Self {
        Arr { v: Self::INIT }
    }
}

pub struct BaFormatFilter<const N: usize> {}

pub enum DigitalFilter<const N: usize>
where
    [(); N * 2 + 1]: Sized,
    [(); N * 2]: Sized,
{
    Ba(BaFormatFilter<{ N * 2 + 1 }>),
}

pub fn iirfilter_st_copy<const N: usize, const M: usize>(_: [f32; M]) -> DigitalFilter<N>
where
    [(); N * 2 + 1]: Sized,
    [(); N * 2]: Sized,
{
    let zpk = zpk2tf_st(&Arr::<f32, { N * 2 }>::new(), &Arr::<f32, { N * 2 }>::new());
    DigitalFilter::Ba(zpk)
}

pub fn zpk2tf_st<const N: usize>(
    _z: &Arr<f32, N>,
    _p: &Arr<f32, N>,
) -> BaFormatFilter<{ N + 1 }>
where
    [(); N + 1]: Sized,
{
    BaFormatFilter {}
}


fn main() {
    iirfilter_st_copy::<4, 2>([10., 50.,]);
}

````
</p>
</details>

Version information
````
rustc 1.83.0-nightly (1a1cc050d 2024-09-01)
binary: rustc
commit-hash: 1a1cc050d8efc906ede39f444936ade1fdc9c6cb
commit-date: 2024-09-01
host: x86_64-unknown-linux-gnu
release: 1.83.0-nightly
LLVM version: 19.1.0

````

Command:
`/home/matthias/.rustup/toolchains/master/bin/rustc -Zincremental-verify-ich=yes -Cincremental=<dir> -Cdebuginfo=2 -Clink-dead-code=true -Zvalidate-mir --edition=2021`

<!--
Include a backtrace in the code block by setting `RUST_BACKTRACE=1` in your
environment. E.g. `RUST_BACKTRACE=1 cargo build`.
-->
<details><summary><strong>Program output</strong></summary>
<p>

```
warning: the feature `generic_const_exprs` is incomplete and may not be safe to use and/or cause compiler crashes
 --> /tmp/icemaker_global_tempdir.40eYA5W2oIUb/rustc_testrunner_tmpdir_reporting.DqRxcpiOUpwU/mvce.rs:1:12
  |
1 | #![feature(generic_const_exprs, generic_arg_infer)]
  |            ^^^^^^^^^^^^^^^^^^^
  |
  = note: see issue #76560 <https://github.com/rust-lang/rust/issues/76560> for more information
  = note: `#[warn(incomplete_features)]` on by default

warning: field `v` is never read
 --> /tmp/icemaker_global_tempdir.40eYA5W2oIUb/rustc_testrunner_tmpdir_reporting.DqRxcpiOUpwU/mvce.rs:6:5
  |
5 | pub struct Arr<T, const N: usize> {
  |            --- field in this struct
6 |     v: [MaybeUninit<T>; N],
  |     ^
  |
  = note: `#[warn(dead_code)]` on by default

error: internal compiler error: compiler/rustc_codegen_ssa/src/debuginfo/type_names.rs:739:14: Invalid `Const` during codegen: UnevaluatedConst { def: DefId(0:37 ~ mvce[36f5]::zpk2tf_st::{constant#0}), args: [(Mul: (4_usize: usize), (2_usize: usize))] }

thread 'rustc' panicked at compiler/rustc_codegen_ssa/src/debuginfo/type_names.rs:739:14:
Box<dyn Any>
stack backtrace:
   0:     0x7ba9a8ffeb2a - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::hd80d83efaa4dd6d3
   1:     0x7ba9a9803157 - core::fmt::write::h4f2fc0d8a4bdbc07
   2:     0x7ba9aaa9d211 - std::io::Write::write_fmt::h5570f2f97ed637ef
   3:     0x7ba9a90011fb - std::panicking::default_hook::{{closure}}::hbf64d79aec33952e
   4:     0x7ba9a9000e6e - std::panicking::default_hook::h80f8634d4a0460dc
   5:     0x7ba9a81618a9 - std[5b205b49935b963f]::panicking::update_hook::<alloc[3fe16f20e15296c8]::boxed::Box<rustc_driver_impl[27278ae619702df]::install_ice_hook::{closure#0}>>::{closure#0}
   6:     0x7ba9a9001b17 - std::panicking::rust_panic_with_hook::hac455baedf27b84b
   7:     0x7ba9a819bb71 - std[5b205b49935b963f]::panicking::begin_panic::<rustc_errors[b46f225bc36daaa0]::ExplicitBug>::{closure#0}
   8:     0x7ba9a818f096 - std[5b205b49935b963f]::sys::backtrace::__rust_end_short_backtrace::<std[5b205b49935b963f]::panicking::begin_panic<rustc_errors[b46f225bc36daaa0]::ExplicitBug>::{closure#0}, !>
   9:     0x7ba9a818f046 - std[5b205b49935b963f]::panicking::begin_panic::<rustc_errors[b46f225bc36daaa0]::ExplicitBug>
  10:     0x7ba9a81a4df1 - <rustc_errors[b46f225bc36daaa0]::diagnostic::BugAbort as rustc_errors[b46f225bc36daaa0]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
  11:     0x7ba9a876d054 - rustc_middle[fdfbfe13c471c215]::util::bug::opt_span_bug_fmt::<rustc_span[682bbc8ac5595dcb]::span_encoding::Span>::{closure#0}
  12:     0x7ba9a8752c0a - rustc_middle[fdfbfe13c471c215]::ty::context::tls::with_opt::<rustc_middle[fdfbfe13c471c215]::util::bug::opt_span_bug_fmt<rustc_span[682bbc8ac5595dcb]::span_encoding::Span>::{closure#0}, !>::{closure#0}
  13:     0x7ba9a8752abb - rustc_middle[fdfbfe13c471c215]::ty::context::tls::with_context_opt::<rustc_middle[fdfbfe13c471c215]::ty::context::tls::with_opt<rustc_middle[fdfbfe13c471c215]::util::bug::opt_span_bug_fmt<rustc_span[682bbc8ac5595dcb]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
  14:     0x7ba9a62e4750 - rustc_middle[fdfbfe13c471c215]::util::bug::bug_fmt
  15:     0x7ba9a9fae940 - rustc_codegen_ssa[3363d47dc11c3c03]::debuginfo::type_names::push_generic_params_internal
  16:     0x7ba9a9f90c1a - rustc_codegen_llvm[35a5f2b3be35e22b]::debuginfo::metadata::build_struct_type_di_node
  17:     0x7ba9a9f9f73d - rustc_codegen_llvm[35a5f2b3be35e22b]::debuginfo::metadata::type_di_node
  18:     0x7ba9aa744941 - rustc_codegen_ssa[3363d47dc11c3c03]::mir::codegen_mir::<rustc_codegen_llvm[35a5f2b3be35e22b]::builder::Builder>
  19:     0x7ba9aa73fa35 - rustc_codegen_llvm[35a5f2b3be35e22b]::base::compile_codegen_unit::module_codegen
  20:     0x7ba9aa7be70d - <rustc_codegen_llvm[35a5f2b3be35e22b]::LlvmCodegenBackend as rustc_codegen_ssa[3363d47dc11c3c03]::traits::backend::ExtraBackendMethods>::compile_codegen_unit
  21:     0x7ba9aa7bad84 - <rustc_codegen_llvm[35a5f2b3be35e22b]::LlvmCodegenBackend as rustc_codegen_ssa[3363d47dc11c3c03]::traits::backend::CodegenBackend>::codegen_crate
  22:     0x7ba9aa99a070 - <rustc_interface[561bcd00c1a26bfb]::queries::Linker>::codegen_and_build_linker
  23:     0x7ba9aa5c9a1b - rustc_interface[561bcd00c1a26bfb]::interface::run_compiler::<core[42bb5247f35782d4]::result::Result<(), rustc_span[682bbc8ac5595dcb]::ErrorGuaranteed>, rustc_driver_impl[27278ae619702df]::run_compiler::{closure#0}>::{closure#1}
  24:     0x7ba9aa673dd0 - std[5b205b49935b963f]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[561bcd00c1a26bfb]::util::run_in_thread_with_globals<rustc_interface[561bcd00c1a26bfb]::util::run_in_thread_pool_with_globals<rustc_interface[561bcd00c1a26bfb]::interface::run_compiler<core[42bb5247f35782d4]::result::Result<(), rustc_span[682bbc8ac5595dcb]::ErrorGuaranteed>, rustc_driver_impl[27278ae619702df]::run_compiler::{closure#0}>::{closure#1}, core[42bb5247f35782d4]::result::Result<(), rustc_span[682bbc8ac5595dcb]::ErrorGuaranteed>>::{closure#0}, core[42bb5247f35782d4]::result::Result<(), rustc_span[682bbc8ac5595dcb]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[42bb5247f35782d4]::result::Result<(), rustc_span[682bbc8ac5595dcb]::ErrorGuaranteed>>
  25:     0x7ba9aa67443a - <<std[5b205b49935b963f]::thread::Builder>::spawn_unchecked_<rustc_interface[561bcd00c1a26bfb]::util::run_in_thread_with_globals<rustc_interface[561bcd00c1a26bfb]::util::run_in_thread_pool_with_globals<rustc_interface[561bcd00c1a26bfb]::interface::run_compiler<core[42bb5247f35782d4]::result::Result<(), rustc_span[682bbc8ac5595dcb]::ErrorGuaranteed>, rustc_driver_impl[27278ae619702df]::run_compiler::{closure#0}>::{closure#1}, core[42bb5247f35782d4]::result::Result<(), rustc_span[682bbc8ac5595dcb]::ErrorGuaranteed>>::{closure#0}, core[42bb5247f35782d4]::result::Result<(), rustc_span[682bbc8ac5595dcb]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[42bb5247f35782d4]::result::Result<(), rustc_span[682bbc8ac5595dcb]::ErrorGuaranteed>>::{closure#1} as core[42bb5247f35782d4]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  26:     0x7ba9aa6747ab - std::sys::pal::unix::thread::Thread::new::thread_start::h59b1848733925366
  27:     0x7ba9abcdf39d - <unknown>
  28:     0x7ba9abd6449c - <unknown>
  29:                0x0 - <unknown>

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: please make sure that you have updated to the latest nightly

note: rustc 1.83.0-nightly (1a1cc050d 2024-09-01) running on x86_64-unknown-linux-gnu

note: compiler flags: -Z incremental-verify-ich=yes -C incremental=[REDACTED] -C debuginfo=2 -C link-dead-code=true -Z validate-mir

query stack during panic:
end of query stack
error: aborting due to 1 previous error; 2 warnings emitted


```

</p>
</details>

<!--
query stack:
error: internal compiler error: compiler/rustc_codegen_ssa/src/debuginfo/type_names.rs:739:14: Invalid `Const` during codegen: UnevaluatedConst { def: DefId(0:37 ~ mvce[36f5]::zpk2tf_st::{constant#0}), args: [(Mul: (4_usize: usize), (2_usize: usize))] }
note: compiler flags: -Z incremental-verify-ich=yes -C incremental=[REDACTED] -C debuginfo=2 -C link-dead-code=true -Z validate-mir

-->
@rustbot label +F-generic_const_exprs +F-generic_arg_infer