Open
Description
Code
#![allow(incomplete_features)]
#![feature(generic_const_exprs)]
const fn arr_insert<const N: usize, T: Copy>(arr: [T; N], elem: T, index: usize) -> [T; N + 1] {
assert!(index <= N);
// Since we have T: Copy, we can dummy init the result
let mut out = [elem; N + 1];
let mut i = 0;
while i < index {
out[i] = arr[i];
i += 1;
}
out[i] = elem;
while i < N {
out[i + 1] = arr[i];
i += 1;
}
out
}
const MY_ARR: [i32; 3] = arr_insert([0, 2], 1, 1);
fn main() {
assert_eq!(MY_ARR, [0, 1, 2]);
}
Meta
rustc --version --verbose
:
rustc 1.89.0-nightly (1bbd62e54 2025-05-29)
binary: rustc
commit-hash: 1bbd62e547ba5cc08ccb44c27def3d33195d2dd5
commit-date: 2025-05-29
host: x86_64-unknown-linux-gnu
release: 1.89.0-nightly
LLVM version: 20.1.5
Error output
Compiling playground v0.0.1 (/playground)
error: internal compiler error: compiler/rustc_const_eval/src/check_consts/qualifs.rs:359:13: expected ConstKind::Param or ConstKind::Value here, found UnevaluatedConst { def: DefId(0:8 ~ playground[ab6f]::arr_insert::{constant#2}), args: [N/#0, T/#1] }
thread 'rustc' panicked at compiler/rustc_const_eval/src/check_consts/qualifs.rs:359:13:
Box<dyn Any>
stack backtrace:
0: 0x7eb3f64a5273 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h05e9f29e57dbb2e9
1: 0x7eb3f6c02af7 - core::fmt::write::hd2dec42d1c7eed2b
2: 0x7eb3f649b0f3 - std::io::Write::write_fmt::he35f7ccd30502a06
3: 0x7eb3f64a50d2 - std::sys::backtrace::BacktraceLock::print::h0f7594efff5cfc74
4: 0x7eb3f64a8cca - std::panicking::default_hook::{{closure}}::h8c1a12024f8172d5
5: 0x7eb3f64a884f - std::panicking::default_hook::h9b1e5be56a49e97f
6: 0x7eb3f550d693 - std[aebe2beb07d4602e]::panicking::update_hook::<alloc[afc79f7023c726bc]::boxed::Box<rustc_driver_impl[fce054646584467]::install_ice_hook::{closure#1}>>::{closure#0}
7: 0x7eb3f64a9543 - std::panicking::rust_panic_with_hook::h466604244439fd1e
8: 0x7eb3f5549d31 - std[aebe2beb07d4602e]::panicking::begin_panic::<rustc_errors[fd968897a4afc233]::ExplicitBug>::{closure#0}
9: 0x7eb3f553ebe6 - std[aebe2beb07d4602e]::sys::backtrace::__rust_end_short_backtrace::<std[aebe2beb07d4602e]::panicking::begin_panic<rustc_errors[fd968897a4afc233]::ExplicitBug>::{closure#0}, !>
10: 0x7eb3f553e8c7 - std[aebe2beb07d4602e]::panicking::begin_panic::<rustc_errors[fd968897a4afc233]::ExplicitBug>
11: 0x7eb3f55537c1 - <rustc_errors[fd968897a4afc233]::diagnostic::BugAbort as rustc_errors[fd968897a4afc233]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
12: 0x7eb3f5b9b32a - rustc_middle[f62d8e2871d7ed5a]::util::bug::opt_span_bug_fmt::<rustc_span[674833ee7b2aca12]::span_encoding::Span>::{closure#0}
13: 0x7eb3f5b78b2a - rustc_middle[f62d8e2871d7ed5a]::ty::context::tls::with_opt::<rustc_middle[f62d8e2871d7ed5a]::util::bug::opt_span_bug_fmt<rustc_span[674833ee7b2aca12]::span_encoding::Span>::{closure#0}, !>::{closure#0}
14: 0x7eb3f5b7899b - rustc_middle[f62d8e2871d7ed5a]::ty::context::tls::with_context_opt::<rustc_middle[f62d8e2871d7ed5a]::ty::context::tls::with_opt<rustc_middle[f62d8e2871d7ed5a]::util::bug::opt_span_bug_fmt<rustc_span[674833ee7b2aca12]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
15: 0x7eb3f2ca9330 - rustc_middle[f62d8e2871d7ed5a]::util::bug::bug_fmt
16: 0x7eb3f88e53a3 - rustc_const_eval[225f976b6d84e0d4]::check_consts::qualifs::in_operand::<rustc_const_eval[225f976b6d84e0d4]::check_consts::qualifs::HasMutInterior, <rustc_const_eval[225f976b6d84e0d4]::check_consts::resolver::TransferFunction<rustc_const_eval[225f976b6d84e0d4]::check_consts::qualifs::HasMutInterior> as rustc_middle[f62d8e2871d7ed5a]::mir::visit::Visitor>::visit_assign::{closure#0}>.cold
17: 0x7eb3f7872de5 - <rustc_const_eval[225f976b6d84e0d4]::check_consts::resolver::FlowSensitiveAnalysis<rustc_const_eval[225f976b6d84e0d4]::check_consts::qualifs::HasMutInterior> as rustc_mir_dataflow[27782b7c2b798f03]::framework::Analysis>::apply_primary_statement_effect
18: 0x7eb3f7874dd1 - <rustc_const_eval[225f976b6d84e0d4]::check_consts::check::Qualifs>::has_mut_interior
19: 0x7eb3f78748ad - <rustc_const_eval[225f976b6d84e0d4]::check_consts::check::Checker>::qualifs_in_return_place
20: 0x7eb3f7874195 - rustc_mir_transform[8802a7a466bf19d]::mir_const_qualif
21: 0x7eb3f7873fe5 - rustc_query_impl[b8ddf5711aeae68a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[b8ddf5711aeae68a]::query_impl::mir_const_qualif::dynamic_query::{closure#2}::{closure#0}, rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 4usize]>>
22: 0x7eb3f7873473 - rustc_query_system[e527f3fe7b1ba41c]::query::plumbing::try_execute_query::<rustc_query_impl[b8ddf5711aeae68a]::DynamicConfig<rustc_query_system[e527f3fe7b1ba41c]::query::caches::DefIdCache<rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 4usize]>>, false, false, false>, rustc_query_impl[b8ddf5711aeae68a]::plumbing::QueryCtxt, false>
23: 0x7eb3f78731cf - rustc_query_impl[b8ddf5711aeae68a]::query_impl::mir_const_qualif::get_query_non_incr::__rust_end_short_backtrace
24: 0x7eb3f3f8b030 - rustc_mir_transform[8802a7a466bf19d]::mir_promoted
25: 0x7eb3f72a4a5a - rustc_query_impl[b8ddf5711aeae68a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[b8ddf5711aeae68a]::query_impl::mir_promoted::dynamic_query::{closure#2}::{closure#0}, rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 16usize]>>
26: 0x7eb3f72a4d08 - rustc_query_system[e527f3fe7b1ba41c]::query::plumbing::try_execute_query::<rustc_query_impl[b8ddf5711aeae68a]::DynamicConfig<rustc_data_structures[63644864ec52dfbb]::vec_cache::VecCache<rustc_span[674833ee7b2aca12]::def_id::LocalDefId, rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 16usize]>, rustc_query_system[e527f3fe7b1ba41c]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[b8ddf5711aeae68a]::plumbing::QueryCtxt, false>
27: 0x7eb3f72a4964 - rustc_query_impl[b8ddf5711aeae68a]::query_impl::mir_promoted::get_query_non_incr::__rust_end_short_backtrace
28: 0x7eb3f6edb68a - rustc_borrowck[16831c75c4923d8d]::mir_borrowck
29: 0x7eb3f6edb519 - rustc_query_impl[b8ddf5711aeae68a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[b8ddf5711aeae68a]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 8usize]>>
30: 0x7eb3f6eda2e6 - rustc_query_system[e527f3fe7b1ba41c]::query::plumbing::try_execute_query::<rustc_query_impl[b8ddf5711aeae68a]::DynamicConfig<rustc_data_structures[63644864ec52dfbb]::vec_cache::VecCache<rustc_span[674833ee7b2aca12]::def_id::LocalDefId, rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[e527f3fe7b1ba41c]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[b8ddf5711aeae68a]::plumbing::QueryCtxt, false>
31: 0x7eb3f6ed9bd2 - rustc_query_impl[b8ddf5711aeae68a]::query_impl::mir_borrowck::get_query_non_incr::__rust_end_short_backtrace
32: 0x7eb3f773095b - rustc_mir_transform[8802a7a466bf19d]::mir_drops_elaborated_and_const_checked
33: 0x7eb3f772ffef - rustc_query_impl[b8ddf5711aeae68a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[b8ddf5711aeae68a]::query_impl::mir_drops_elaborated_and_const_checked::dynamic_query::{closure#2}::{closure#0}, rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 8usize]>>
34: 0x7eb3f6eda2e6 - rustc_query_system[e527f3fe7b1ba41c]::query::plumbing::try_execute_query::<rustc_query_impl[b8ddf5711aeae68a]::DynamicConfig<rustc_data_structures[63644864ec52dfbb]::vec_cache::VecCache<rustc_span[674833ee7b2aca12]::def_id::LocalDefId, rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[e527f3fe7b1ba41c]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[b8ddf5711aeae68a]::plumbing::QueryCtxt, false>
35: 0x7eb3f6ed9b1a - rustc_query_impl[b8ddf5711aeae68a]::query_impl::mir_drops_elaborated_and_const_checked::get_query_non_incr::__rust_end_short_backtrace
36: 0x7eb3f7817e91 - rustc_mir_transform[8802a7a466bf19d]::mir_for_ctfe
37: 0x7eb3f7817d0b - rustc_query_impl[b8ddf5711aeae68a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[b8ddf5711aeae68a]::query_impl::mir_for_ctfe::dynamic_query::{closure#2}::{closure#0}, rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 8usize]>>
38: 0x7eb3f6c249bd - rustc_query_system[e527f3fe7b1ba41c]::query::plumbing::try_execute_query::<rustc_query_impl[b8ddf5711aeae68a]::DynamicConfig<rustc_query_system[e527f3fe7b1ba41c]::query::caches::DefIdCache<rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[b8ddf5711aeae68a]::plumbing::QueryCtxt, false>
39: 0x7eb3f7b1aa22 - rustc_query_impl[b8ddf5711aeae68a]::query_impl::mir_for_ctfe::get_query_non_incr::__rust_end_short_backtrace
40: 0x7eb3f7addf97 - <rustc_const_eval[225f976b6d84e0d4]::interpret::eval_context::InterpCx<rustc_const_eval[225f976b6d84e0d4]::const_eval::machine::CompileTimeMachine>>::init_fn_call
41: 0x7eb3f7b1c58f - rustc_const_eval[225f976b6d84e0d4]::const_eval::eval_queries::eval_to_allocation_raw_provider
42: 0x7eb3f7b1b298 - rustc_query_impl[b8ddf5711aeae68a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[b8ddf5711aeae68a]::query_impl::eval_to_allocation_raw::dynamic_query::{closure#2}::{closure#0}, rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 24usize]>>
43: 0x7eb3f78f6f41 - rustc_query_system[e527f3fe7b1ba41c]::query::plumbing::try_execute_query::<rustc_query_impl[b8ddf5711aeae68a]::DynamicConfig<rustc_query_system[e527f3fe7b1ba41c]::query::caches::DefaultCache<rustc_middle[f62d8e2871d7ed5a]::ty::PseudoCanonicalInput<rustc_middle[f62d8e2871d7ed5a]::mir::interpret::GlobalId>, rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 24usize]>>, false, false, false>, rustc_query_impl[b8ddf5711aeae68a]::plumbing::QueryCtxt, false>
44: 0x7eb3f78f6afb - rustc_query_impl[b8ddf5711aeae68a]::query_impl::eval_to_allocation_raw::get_query_non_incr::__rust_end_short_backtrace
45: 0x7eb3f78f3ffd - rustc_const_eval[225f976b6d84e0d4]::const_eval::eval_queries::eval_to_const_value_raw_provider
46: 0x7eb3f78f3e00 - rustc_query_impl[b8ddf5711aeae68a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[b8ddf5711aeae68a]::query_impl::eval_to_const_value_raw::dynamic_query::{closure#2}::{closure#0}, rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 24usize]>>
47: 0x7eb3f78f27b8 - rustc_query_system[e527f3fe7b1ba41c]::query::plumbing::try_execute_query::<rustc_query_impl[b8ddf5711aeae68a]::DynamicConfig<rustc_query_system[e527f3fe7b1ba41c]::query::caches::DefaultCache<rustc_middle[f62d8e2871d7ed5a]::ty::PseudoCanonicalInput<rustc_middle[f62d8e2871d7ed5a]::mir::interpret::GlobalId>, rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 24usize]>>, false, true, false>, rustc_query_impl[b8ddf5711aeae68a]::plumbing::QueryCtxt, false>
48: 0x7eb3f78f2355 - rustc_query_impl[b8ddf5711aeae68a]::query_impl::eval_to_const_value_raw::get_query_non_incr::__rust_end_short_backtrace
49: 0x7eb3f6ed8c75 - rustc_hir_analysis[a4b8650fa8fb028e]::check_crate
50: 0x7eb3f6ed4577 - rustc_interface[82c1fd2543dc0997]::passes::run_required_analyses
51: 0x7eb3f789249e - rustc_interface[82c1fd2543dc0997]::passes::analysis
52: 0x7eb3f7892471 - rustc_query_impl[b8ddf5711aeae68a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[b8ddf5711aeae68a]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 0usize]>>
53: 0x7eb3f78954ba - rustc_query_system[e527f3fe7b1ba41c]::query::plumbing::try_execute_query::<rustc_query_impl[b8ddf5711aeae68a]::DynamicConfig<rustc_query_system[e527f3fe7b1ba41c]::query::caches::SingleCache<rustc_middle[f62d8e2871d7ed5a]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[b8ddf5711aeae68a]::plumbing::QueryCtxt, false>
54: 0x7eb3f789507b - rustc_query_impl[b8ddf5711aeae68a]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
55: 0x7eb3f7e09cbf - rustc_interface[82c1fd2543dc0997]::passes::create_and_enter_global_ctxt::<core[50b5a8f5e07183b8]::option::Option<rustc_interface[82c1fd2543dc0997]::queries::Linker>, rustc_driver_impl[fce054646584467]::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}
56: 0x7eb3f7df9681 - rustc_interface[82c1fd2543dc0997]::interface::run_compiler::<(), rustc_driver_impl[fce054646584467]::run_compiler::{closure#0}>::{closure#1}
57: 0x7eb3f7db9c06 - std[aebe2beb07d4602e]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[82c1fd2543dc0997]::util::run_in_thread_with_globals<rustc_interface[82c1fd2543dc0997]::util::run_in_thread_pool_with_globals<rustc_interface[82c1fd2543dc0997]::interface::run_compiler<(), rustc_driver_impl[fce054646584467]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
58: 0x7eb3f7db98ef - <<std[aebe2beb07d4602e]::thread::Builder>::spawn_unchecked_<rustc_interface[82c1fd2543dc0997]::util::run_in_thread_with_globals<rustc_interface[82c1fd2543dc0997]::util::run_in_thread_pool_with_globals<rustc_interface[82c1fd2543dc0997]::interface::run_compiler<(), rustc_driver_impl[fce054646584467]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[50b5a8f5e07183b8]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
59: 0x7eb3f7dbaebd - std::sys::pal::unix::thread::Thread::new::thread_start::h45be790786894548
60: 0x7eb3f188aaa4 - <unknown>
61: 0x7eb3f1917a34 - clone
62: 0x0 - <unknown>
Backtrace
Compiling playground v0.0.1 (/playground)
error: internal compiler error: compiler/rustc_const_eval/src/check_consts/qualifs.rs:359:13: expected ConstKind::Param or ConstKind::Value here, found UnevaluatedConst { def: DefId(0:8 ~ playground[ab6f]::arr_insert::{constant#2}), args: [N/#0, T/#1] }
thread 'rustc' panicked at compiler/rustc_const_eval/src/check_consts/qualifs.rs:359:13:
Box<dyn Any>
stack backtrace:
0: std::panicking::begin_panic::<rustc_errors::ExplicitBug>
1: <rustc_errors::diagnostic::BugAbort as rustc_errors::diagnostic::EmissionGuarantee>::emit_producing_guarantee
2: rustc_middle::util::bug::opt_span_bug_fmt::<rustc_span::span_encoding::Span>::{closure#0}
3: rustc_middle::ty::context::tls::with_opt::<rustc_middle::util::bug::opt_span_bug_fmt<rustc_span::span_encoding::Span>::{closure#0}, !>::{closure#0}
4: rustc_middle::ty::context::tls::with_context_opt::<rustc_middle::ty::context::tls::with_opt<rustc_middle::util::bug::opt_span_bug_fmt<rustc_span::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
5: rustc_middle::util::bug::bug_fmt
6: rustc_const_eval::check_consts::qualifs::in_operand::<rustc_const_eval::check_consts::qualifs::HasMutInterior, <rustc_const_eval::check_consts::resolver::TransferFunction<rustc_const_eval::check_consts::qualifs::HasMutInterior> as rustc_middle::mir::visit::Visitor>::visit_assign::{closure#0}>.cold
7: <rustc_const_eval::check_consts::resolver::FlowSensitiveAnalysis<rustc_const_eval::check_consts::qualifs::HasMutInterior> as rustc_mir_dataflow::framework::Analysis>::apply_primary_statement_effect
8: <rustc_const_eval::check_consts::check::Qualifs>::has_mut_interior
9: <rustc_const_eval::check_consts::check::Checker>::qualifs_in_return_place
10: rustc_mir_transform::mir_const_qualif
[... omitted 1 frame ...]
11: rustc_mir_transform::mir_promoted
[... omitted 1 frame ...]
12: rustc_borrowck::mir_borrowck
[... omitted 1 frame ...]
13: rustc_mir_transform::mir_drops_elaborated_and_const_checked
[... omitted 1 frame ...]
14: rustc_mir_transform::mir_for_ctfe
[... omitted 1 frame ...]
15: <rustc_const_eval::interpret::eval_context::InterpCx<rustc_const_eval::const_eval::machine::CompileTimeMachine>>::init_fn_call
16: rustc_const_eval::const_eval::eval_queries::eval_to_allocation_raw_provider
[... omitted 1 frame ...]
17: rustc_const_eval::const_eval::eval_queries::eval_to_const_value_raw_provider
[... omitted 1 frame ...]
18: rustc_hir_analysis::check_crate
19: rustc_interface::passes::run_required_analyses
20: rustc_interface::passes::analysis
[... omitted 1 frame ...]
21: rustc_interface::passes::create_and_enter_global_ctxt::<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}
22: rustc_interface::interface::run_compiler::<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
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: please attach the file at `/playground/rustc-ice-2025-05-30T23_04_02-26.txt` to your bug report
note: compiler flags: --crate-type bin -C embed-bitcode=no -C codegen-units=1 -C debuginfo=2
note: some of the compiler flags provided by cargo are hidden
query stack during panic:
#0 [mir_const_qualif] const checking `arr_insert`
#1 [mir_promoted] promoting constants in MIR for `arr_insert`
#2 [mir_borrowck] borrow-checking `arr_insert`
#3 [mir_drops_elaborated_and_const_checked] elaborating drops for `arr_insert`
#4 [mir_for_ctfe] caching mir of `arr_insert` for CTFE
#5 [eval_to_allocation_raw] const-evaluating + checking `MY_ARR`
#6 [eval_to_const_value_raw] simplifying constant for the type system `MY_ARR`
#7 [analysis] running analysis passes on this crate
end of query stack
error: could not compile `playground` (bin "playground")