rust-lang / rust-lang/rust

ICE: `index out of bounds` in `rustc_middle/src/ty/generic_args.rs`'s `param_at`

Open
#148,124 2 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

C-bug F-associated_const_equality F-impl_trait_in_assoc_type I-ICE T-compiler
Dominant language
Rust
Stars
119k
Forks
16.1k
PR merge metrics
PR metrics pending

Description

Code
#![feature(associated_const_equality)]
#![feature(impl_trait_in_assoc_type)]

trait Trait<T> {
    const K: T;
}
trait Discard {
    type Out;
}

trait Inner {
    type T;
}

impl<'a> Inner for &'a i32 {
    type T = impl Trait<<fn(&'a str) -> &'a str as Discard>::Out, K = { () }>;
}

fn main() {}

A mutant of glacier2's fixed/23406.rs

Meta

rustc --version --verbose:

rustc 1.93.0-nightly (34f954f9b 2025-10-25)
binary: rustc
commit-hash: 34f954f9b7cbdb5e9b408bac1c4ff1e88b5f2719
commit-date: 2025-10-25
host: x86_64-apple-darwin
release: 1.93.0-nightly
LLVM version: 21.1.3
Error output

command: rustc

thread 'rustc' (47100741) panicked at compiler/rustc_middle/src/ty/generics.rs:221:29:
index out of bounds: the len is 0 but the index is 0
Backtrace

thread 'rustc' (47100741) panicked at compiler/rustc_middle/src/ty/generics.rs:221:29:
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_middle::ty::generics::Generics>::param_at
   4: <dyn rustc_hir_analysis::hir_ty_lowering::HirTyLowerer>::lower_poly_trait_ref
   5: <dyn rustc_hir_analysis::hir_ty_lowering::HirTyLowerer>::lower_bounds::<&[rustc_hir::hir::GenericBound]>
   6: rustc_hir_analysis::collect::item_bounds::opaque_type_bounds
   7: rustc_hir_analysis::collect::item_bounds::explicit_item_bounds_with_filter
   8: rustc_hir_analysis::collect::item_bounds::explicit_item_self_bounds
      [... omitted 2 frames ...]
   9: rustc_hir_analysis::collect::item_bounds::item_self_bounds
      [... omitted 1 frame ...]
  10: <rustc_trait_selection::traits::select::SelectionContext>::assemble_candidates
  11: <rustc_trait_selection::traits::select::SelectionContext>::candidate_from_obligation::{closure#0}::{closure#0}
  12: <rustc_trait_selection::traits::select::SelectionContext>::candidate_from_obligation::{closure#0}
  13: <rustc_trait_selection::traits::select::SelectionContext>::poly_select::{closure#0}
  14: <rustc_trait_selection::traits::fulfill::FulfillProcessor>::process_trait_obligation
  15: <rustc_trait_selection::traits::fulfill::FulfillProcessor as rustc_data_structures::obligation_forest::ObligationProcessor>::process_obligation
  16: <rustc_data_structures::obligation_forest::ObligationForest<rustc_trait_selection::traits::fulfill::PendingPredicateObligation>>::process_obligations::<rustc_trait_selection::traits::fulfill::FulfillProcessor>
  17: <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
  18: <rustc_trait_selection::traits::fulfill::FulfillmentContext<rustc_trait_selection::traits::FulfillmentError> as rustc_infer::traits::engine::TraitEngine<rustc_trait_selection::traits::FulfillmentError>>::evaluate_obligations_error_on_ambiguity
  19: rustc_hir_analysis::check::compare_impl_item::check_type_bounds
  20: rustc_hir_analysis::check::compare_impl_item::compare_impl_item
      [... omitted 1 frame ...]
  21: rustc_hir_analysis::check::check::check_impl_items_against_trait
  22: rustc_hir_analysis::check::check::check_item_type
  23: rustc_hir_analysis::check::wfcheck::check_well_formed
      [... omitted 1 frame ...]
  24: rustc_hir_analysis::check::wfcheck::check_type_wf
      [... omitted 1 frame ...]
  25: rustc_hir_analysis::check_crate
  26: rustc_interface::passes::analysis
      [... omitted 1 frame ...]
  27: rustc_interface::passes::create_and_enter_global_ctxt::<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>
  28: 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/scratch_250918/rustc-ice-2025-10-26T04_04_40-96550.txt` to your bug report

query stack during panic:
#0 [explicit_item_self_bounds] finding item bounds for `<impl at 2.rs:15:1: 15:27>::T::{opaque#0}`
#1 [item_self_bounds] elaborating item assumptions for `<impl at 2.rs:15:1: 15:27>::T::{opaque#0}`
#2 [compare_impl_item] checking assoc item `<impl at 2.rs:15:1: 15:27>::T` is compatible with trait definition
#3 [check_well_formed] checking that `<impl at 2.rs:15:1: 15:27>` is well-formed
#4 [check_type_wf] checking that types are well-formed
#5 [analysis] running analysis passes on this crate
end of query stack

Regression in

Regression in nightly-2024-10-06

Log

cargo-bisect-rustc --start=2024-07-01 --end=2025-10-25 --regress ice --preserve --script rustc -- 1.rs

searched toolchains nightly-2024-07-01 through nightly-2025-10-25

********************************************************************************
Regression in nightly-2024-10-06
********************************************************************************

fetching https://static.rust-lang.org/dist/2024-10-05/channel-rust-nightly-git-commit-hash.txt
nightly manifest 2024-10-05: 40 B / 40 B [=======================================================] 100.00 % 772.61 KB/s converted 2024-10-05 to 14f303bc1430a78ddaa91b3e104bbe4c0413184e
fetching https://static.rust-lang.org/dist/2024-10-06/channel-rust-nightly-git-commit-hash.txt
nightly manifest 2024-10-06: 40 B / 40 B [=======================================================] 100.00 % 675.02 KB/s converted 2024-10-06 to 9096f4fafa2ac2d771f866337b4ee7064cde8575
looking for regression commit between 2024-10-05 and 2024-10-06
fetching (via remote github) commits from max(14f303bc1430a78ddaa91b3e104bbe4c0413184e, 2024-10-03) to 9096f4fafa2ac2d771f866337b4ee7064cde8575
ending github query because we found starting sha: 14f303bc1430a78ddaa91b3e104bbe4c0413184e
get_commits_between returning commits, len: 11
  commit[0] 2024-10-04: Auto merge of #130157 - eduardosm:stabilize-const_float_classify, r=RalfJung
  commit[1] 2024-10-04: Auto merge of #131269 - workingjubilee:rollup-bf7fzhf, r=workingjubilee
  commit[2] 2024-10-05: Auto merge of #131124 - weihanglo:update-cargo, r=weihanglo
  commit[3] 2024-10-05: Auto merge of #131275 - workingjubilee:rollup-4yxqio3, r=workingjubilee
  commit[4] 2024-10-05: Auto merge of #129244 - cjgillot:opaque-hir, r=compiler-errors
  commit[5] 2024-10-05: Auto merge of #3943 - RalfJung:pthread-mutex-reentrant, r=RalfJung
  commit[6] 2024-10-05: Auto merge of #3940 - rust-lang:refutable_slice, r=RalfJung
  commit[7] 2024-10-05: Auto merge of #131288 - matthiaskrgr:rollup-h0t0v2h, r=matthiaskrgr
  commit[8] 2024-10-05: Auto merge of #131188 - Kobzol:remove-libstd-so-from-sysroot, r=onur-ozkan
  commit[9] 2024-10-05: Auto merge of #131221 - XrXr:bump-compiler-builtins, r=tgross35
  commit[10] 2024-10-05: Auto merge of #131302 - matthiaskrgr:rollup-56kbpzx, r=matthiaskrgr
ERROR: no CI builds available between 14f303bc1430a78ddaa91b3e104bbe4c0413184e and 9096f4fafa2ac2d771f866337b4ee7064cde8575 within last 167 days

Notes

@rustbot label +F-associated_const_equality +F-impl_trait_in_assoc_type

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the supplied example with the nightly toolchain, then inspect compiler/rustc_middle/src/ty/generics.rs around line 221 and the query stack through rustc_hir_analysis. Compare the regression boundary at nightly-2024-10-06, particularly the opaque-hir change. Done means this example no longer causes an index-out-of-bounds compiler 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
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.