ICE: `index out of bounds` in `rustc_middle/src/ty/generic_args.rs`'s `type_at`
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.1k
- PR merge metrics
- PR metrics pending
Description
Code
#![feature(generic_const_exprs)]
#![allow(incomplete_features)]
struct Test<const N: usize>;
fn new<const N: usize>() -> Test<N>
where
[(); N * 1]: Sized,
{
Test
}
fn test<const N: usize>() -> Test<{ N - 1 }>
where
[(); (N - usize::MAX) * 1]: Sized,
{
new()
}
fn main() {}
A mutant of glacier2's fixed/134479-2.rs.
Meta
rustc --version --verbose:
rustc 1.92.0-nightly (6501e64fc 2025-10-23)
binary: rustc
commit-hash: 6501e64fcb02d22b49d6e59d10a7692ec8095619
commit-date: 2025-10-23
host: x86_64-apple-darwin
release: 1.92.0-nightly
LLVM version: 21.1.3
Error output
command: rustc
thread 'rustc' (44328524) panicked at compiler/rustc_middle/src/ty/generic_args.rs:54:14:
index out of bounds: the len is 0 but the index is 0
Backtrace
thread 'rustc' (44328524) panicked at compiler/rustc_middle/src/ty/generic_args.rs:54:14:
index out of bounds: the len is 0 but the index is 0
stack backtrace:
0: __rustc::rust_begin_unwind
1: core::panicking::panic_fmt
2: core::panicking::panic_bounds_check
3: <rustc_trait_selection::traits::wf::WfPredicates>::add_wf_preds_for_inherent_projection
4: <rustc_trait_selection::traits::wf::WfPredicates as rustc_type_ir::visit::TypeVisitor<rustc_middle::ty::context::TyCtxt>>::visit_const
5: <rustc_trait_selection::traits::wf::WfPredicates as rustc_type_ir::visit::TypeVisitor<rustc_middle::ty::context::TyCtxt>>::visit_const
6: rustc_trait_selection::traits::wf::obligations
7: <rustc_trait_selection::traits::fulfill::FulfillProcessor as rustc_data_structures::obligation_forest::ObligationProcessor>::process_obligation
8: <rustc_data_structures::obligation_forest::ObligationForest<rustc_trait_selection::traits::fulfill::PendingPredicateObligation>>::process_obligations::<rustc_trait_selection::traits::fulfill::FulfillProcessor>
9: <rustc_trait_selection::traits::fulfill::FulfillmentContext<rustc_trait_selection::traits::FulfillmentError> as rustc_infer::traits::engine::TraitEngine<rustc_trait_selection::traits::FulfillmentError>>::try_evaluate_obligations
10: <rustc_hir_typeck::fn_ctxt::FnCtxt>::resolve_vars_with_obligations::<rustc_middle::ty::Ty>
11: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
12: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
13: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
14: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_block
15: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
16: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_return_or_body_tail
17: rustc_hir_typeck::check::check_fn
18: rustc_hir_typeck::typeck_with_inspect::{closure#0}
19: rustc_hir_typeck::typeck
[... omitted 1 frame ...]
20: <rustc_middle::ty::context::TyCtxt>::par_hir_body_owners::<rustc_hir_analysis::check_crate::{closure#2}>::{closure#0}
21: rustc_hir_analysis::check_crate
22: rustc_interface::passes::analysis
[... omitted 1 frame ...]
23: rustc_interface::passes::create_and_enter_global_ctxt::<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>
24: 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.
error: the compiler unexpectedly panicked. this is a bug.
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 `/Volumes/T7/workspace/run_251022_250515_genie_full/scratch/rustc-ice-2025-10-24T06_24_19-73644.txt` to your bug report
query stack during panic:
#0 [typeck] type-checking `test`
#1 [analysis] running analysis passes on this crate
end of query stack
Notes
-
ICE location:
rustc_middle/src/ty/generic_args.rs Line-54
https://github.com/rust-lang/rust/blob/6501e64fcb02d22b49d6e59d10a7692ec8095619/compiler/rustc_middle/src/ty/generic_args.rs#L43-L55 -
I searched for open ICE issues with
generic_args.rsquery, and I guess there's no duplicates in there. (https://github.com/rust-lang/rust/issues?q=is%3Aissue%20state%3Aopen%20label%3AI-ICE%20%22generic_args.rs%22)
@rustbot label +F-generic_const_exprs
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the ICE with the provided generic_const_exprs example on the reported nightly compiler. Read compiler/rustc_middle/src/ty/generic_args.rs around type_at and follow the backtrace through add_wf_preds_for_inherent_projection and rustc_hir_typeck. Done means the example no longer causes an index-out-of-bounds panic.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100