Skip to content

[ICE]: mgca: broken mir Failed subtyping u8 and usize #152962

@matthiaskrgr

Description

@matthiaskrgr

auto-reduced (treereduce-rust):

//@compile-flags: -Zvalidate-mir
#![feature(min_generic_const_args)]

pub struct A;

pub trait Array {
    type const LEN: usize;
    fn arr() -> [u8; Self::LEN];
}

impl Array for A {
    type const LEN: usize = 0u8;

    fn arr() -> [u8; const { Self::LEN }] {}
}

fn main() {}

original:

// This test should compile without an ICE.
#![expect(incomplete_features)]
#![feature(min_generic_const_args)]

pub struct A;

pub trait Array {
    type const LEN: usize;
    fn arr() -> [u8; Self::LEN];
}

impl Array for A {
    type const LEN: usize = 0u8;

    #[allow(unused_braces)]
    fn arr() -> [u8; const { Self::LEN }] {
        return [0u8; const { Self::LEN }];
    }
}

fn main() {
    let _ = A::arr();
}

Version information

rustc 1.95.0-nightly (d8b2222b1 2026-02-22)
binary: rustc
commit-hash: d8b2222b11fc03a31d43707c8c9006f025809ece
commit-date: 2026-02-22
host: x86_64-unknown-linux-gnu
release: 1.95.0-nightly
LLVM version: 22.1.0

Possibly related line of code:

};
cfg_checker.visit_body(body);
cfg_checker.check_cleanup_control_flow();
// Also run the TypeChecker.
for (location, msg) in validate_types(tcx, typing_env, body, body) {
cfg_checker.fail(location, msg);
}
// Ensure that debuginfo records are not emitted for locals that are not in debuginfo.
for (location, msg) in validate_debuginfos(body) {
cfg_checker.fail(location, msg);
}

Command:
/home/matthias/.rustup/toolchains/master/bin/rustc -Zvalidate-mir

Program output

warning: the feature `min_generic_const_args` is incomplete and may not be safe to use and/or cause compiler crashes
 --> /tmp/icemaker_global_tempdir.Oy9yDV5qqc2b/rustc_testrunner_tmpdir_reporting.LyErRaNwc3AJ/mvce.rs:1:12
  |
1 | #![feature(min_generic_const_args)]
  |            ^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: see issue #132980 <https://github.com/rust-lang/rust/issues/132980> for more information
  = note: `#[warn(incomplete_features)]` on by default

error: internal compiler error: /rustc-dev/d8b2222b11fc03a31d43707c8c9006f025809ece/compiler/rustc_mir_transform/src/validate.rs:81:25: broken MIR in Item(DefId(0:12 ~ mvce[8afd]::{impl#0}::arr::{constant#0})) (after pass LowerIntrinsics) at bb0[1]:
                                Failed subtyping u8 and usize
  --> /tmp/icemaker_global_tempdir.Oy9yDV5qqc2b/rustc_testrunner_tmpdir_reporting.LyErRaNwc3AJ/mvce.rs:13:30
   |
13 |     fn arr() -> [u8; const { Self::LEN }] {}
   |                              ^^^^^^^^^


thread 'rustc' (3866828) panicked at /rustc-dev/d8b2222b11fc03a31d43707c8c9006f025809ece/compiler/rustc_mir_transform/src/validate.rs:81:25:
Box<dyn Any>
stack backtrace:
   0:     0x7f8d5a1b6c3b - <<std[85f758501382144e]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[8789ce5c2077b08]::fmt::Display>::fmt
   1:     0x7f8d5a821708 - core[8789ce5c2077b08]::fmt::write
   2:     0x7f8d5a1cdc46 - <std[85f758501382144e]::sys::stdio::unix::Stderr as std[85f758501382144e]::io::Write>::write_fmt
   3:     0x7f8d5a18cd28 - std[85f758501382144e]::panicking::default_hook::{closure#0}
   4:     0x7f8d5a1aa0a3 - std[85f758501382144e]::panicking::default_hook
   5:     0x7f8d591844f0 - std[85f758501382144e]::panicking::update_hook::<alloc[8be57496d656d8af]::boxed::Box<rustc_driver_impl[10da71731441b30c]::install_ice_hook::{closure#1}>>::{closure#0}
   6:     0x7f8d5a1aa382 - std[85f758501382144e]::panicking::panic_with_hook
   7:     0x7f8d591b54e1 - std[85f758501382144e]::panicking::begin_panic::<rustc_errors[59fe9fc6c673b71f]::ExplicitBug>::{closure#0}
   8:     0x7f8d591ae1f6 - std[85f758501382144e]::sys::backtrace::__rust_end_short_backtrace::<std[85f758501382144e]::panicking::begin_panic<rustc_errors[59fe9fc6c673b71f]::ExplicitBug>::{closure#0}, !>
   9:     0x7f8d591ae06b - std[85f758501382144e]::panicking::begin_panic::<rustc_errors[59fe9fc6c673b71f]::ExplicitBug>
  10:     0x7f8d591c07a1 - <rustc_errors[59fe9fc6c673b71f]::diagnostic::BugAbort as rustc_errors[59fe9fc6c673b71f]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
  11:     0x7f8d5975a16c - <rustc_errors[59fe9fc6c673b71f]::DiagCtxtHandle>::span_bug::<rustc_span[868b5fcbf14cfd1b]::span_encoding::Span, alloc[8be57496d656d8af]::string::String>
  12:     0x7f8d59781576 - rustc_middle[8da661eace2d3835]::util::bug::opt_span_bug_fmt::<rustc_span[868b5fcbf14cfd1b]::span_encoding::Span>::{closure#0}
  13:     0x7f8d59781722 - rustc_middle[8da661eace2d3835]::ty::context::tls::with_opt::<rustc_middle[8da661eace2d3835]::util::bug::opt_span_bug_fmt<rustc_span[868b5fcbf14cfd1b]::span_encoding::Span>::{closure#0}, !>::{closure#0}
  14:     0x7f8d5977281b - rustc_middle[8da661eace2d3835]::ty::context::tls::with_context_opt::<rustc_middle[8da661eace2d3835]::ty::context::tls::with_opt<rustc_middle[8da661eace2d3835]::util::bug::opt_span_bug_fmt<rustc_span[868b5fcbf14cfd1b]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
  15:     0x7f8d57d7f6c8 - rustc_middle[8da661eace2d3835]::util::bug::span_bug_fmt::<rustc_span[868b5fcbf14cfd1b]::span_encoding::Span>
  16:     0x7f8d57af55f5 - <rustc_mir_transform[92f07fcce88160bd]::validate::CfgChecker>::fail::<alloc[8be57496d656d8af]::string::String>
  17:     0x7f8d5b477b5a - <rustc_mir_transform[92f07fcce88160bd]::validate::Validator as rustc_mir_transform[92f07fcce88160bd]::pass_manager::MirPass>::run_pass
  18:     0x7f8d5890d205 - rustc_mir_transform[92f07fcce88160bd]::pass_manager::validate_body
  19:     0x7f8d5a80dde1 - rustc_mir_transform[92f07fcce88160bd]::run_analysis_to_runtime_passes
  20:     0x7f8d5b5fd483 - rustc_mir_transform[92f07fcce88160bd]::mir_drops_elaborated_and_const_checked
  21:     0x7f8d5b5fce99 - rustc_query_impl[901efb9d08f37e5f]::query_impl::mir_drops_elaborated_and_const_checked::invoke_provider_fn::__rust_begin_short_backtrace
  22:     0x7f8d5aff17fe - rustc_query_impl[901efb9d08f37e5f]::execution::try_execute_query::<rustc_data_structures[9b2faa242a22c885]::vec_cache::VecCache<rustc_span[868b5fcbf14cfd1b]::def_id::LocalDefId, rustc_middle[8da661eace2d3835]::query::erase::ErasedData<[u8; 8usize]>, rustc_middle[8da661eace2d3835]::dep_graph::graph::DepNodeIndex>, {rustc_query_impl[901efb9d08f37e5f]::QueryFlags { is_anon: false, is_depth_limit: false, is_feedable: false }}, false>
  23:     0x7f8d5aff1189 - rustc_query_impl[901efb9d08f37e5f]::query_impl::mir_drops_elaborated_and_const_checked::get_query_non_incr::__rust_end_short_backtrace
  24:     0x7f8d5b5bc6c0 - rustc_mir_transform[92f07fcce88160bd]::mir_for_ctfe
  25:     0x7f8d5b5bbeeb - rustc_query_impl[901efb9d08f37e5f]::query_impl::mir_for_ctfe::invoke_provider_fn::__rust_begin_short_backtrace
  26:     0x7f8d5a85a7eb - rustc_query_impl[901efb9d08f37e5f]::execution::try_execute_query::<rustc_middle[8da661eace2d3835]::query::caches::DefIdCache<rustc_middle[8da661eace2d3835]::query::erase::ErasedData<[u8; 8usize]>>, {rustc_query_impl[901efb9d08f37e5f]::QueryFlags { is_anon: false, is_depth_limit: false, is_feedable: false }}, false>
  27:     0x7f8d5b842c9a - rustc_query_impl[901efb9d08f37e5f]::query_impl::mir_for_ctfe::get_query_non_incr::__rust_end_short_backtrace
  28:     0x7f8d5b8426f7 - <rustc_const_eval[23c6069727b208f]::interpret::eval_context::InterpCx<rustc_const_eval[23c6069727b208f]::const_eval::machine::CompileTimeMachine>>::load_mir
  29:     0x7f8d5b84417b - rustc_const_eval[23c6069727b208f]::const_eval::eval_queries::eval_to_allocation_raw_provider
  30:     0x7f8d5b8439d6 - rustc_query_impl[901efb9d08f37e5f]::query_impl::eval_to_allocation_raw::invoke_provider_fn::__rust_begin_short_backtrace
  31:     0x7f8d5b8431a1 - rustc_query_impl[901efb9d08f37e5f]::execution::try_execute_query::<rustc_middle[8da661eace2d3835]::query::caches::DefaultCache<rustc_middle[8da661eace2d3835]::ty::PseudoCanonicalInput<rustc_middle[8da661eace2d3835]::mir::interpret::GlobalId>, rustc_middle[8da661eace2d3835]::query::erase::ErasedData<[u8; 24usize]>>, {rustc_query_impl[901efb9d08f37e5f]::QueryFlags { is_anon: false, is_depth_limit: false, is_feedable: false }}, false>
  32:     0x7f8d5b842d73 - rustc_query_impl[901efb9d08f37e5f]::query_impl::eval_to_allocation_raw::get_query_non_incr::__rust_end_short_backtrace
  33:     0x7f8d5b81e1e9 - rustc_const_eval[23c6069727b208f]::const_eval::valtrees::eval_to_valtree
  34:     0x7f8d5b81dfe6 - <rustc_const_eval[23c6069727b208f]::provide::{closure#0} as core[8789ce5c2077b08]::ops::function::FnOnce<(rustc_middle[8da661eace2d3835]::ty::context::TyCtxt, rustc_middle[8da661eace2d3835]::ty::PseudoCanonicalInput<rustc_middle[8da661eace2d3835]::mir::interpret::GlobalId>)>>::call_once
  35:     0x7f8d5b81df9c - rustc_query_impl[901efb9d08f37e5f]::query_impl::eval_to_valtree::invoke_provider_fn::__rust_begin_short_backtrace
  36:     0x7f8d5b332ef4 - rustc_query_impl[901efb9d08f37e5f]::execution::try_execute_query::<rustc_middle[8da661eace2d3835]::query::caches::DefaultCache<rustc_middle[8da661eace2d3835]::ty::PseudoCanonicalInput<rustc_middle[8da661eace2d3835]::mir::interpret::GlobalId>, rustc_middle[8da661eace2d3835]::query::erase::ErasedData<[u8; 16usize]>>, {rustc_query_impl[901efb9d08f37e5f]::QueryFlags { is_anon: false, is_depth_limit: false, is_feedable: false }}, false>
  37:     0x7f8d5b332b30 - rustc_query_impl[901efb9d08f37e5f]::query_impl::eval_to_valtree::get_query_non_incr::__rust_end_short_backtrace
  38:     0x7f8d577b6262 - <rustc_middle[8da661eace2d3835]::ty::context::TyCtxt>::const_eval_resolve_for_typeck
  39:     0x7f8d5a9cd5da - rustc_trait_selection[4a6c75efdfd4ddbc]::traits::try_evaluate_const
  40:     0x7f8d5a9d0edb - <rustc_trait_selection[4a6c75efdfd4ddbc]::traits::normalize::AssocTypeNormalizer as rustc_type_ir[55389d109bf31374]::fold::TypeFolder<rustc_middle[8da661eace2d3835]::ty::context::TyCtxt>>::fold_const
  41:     0x7f8d5a9d2af4 - <rustc_middle[8da661eace2d3835]::ty::Ty as rustc_type_ir[55389d109bf31374]::fold::TypeSuperFoldable<rustc_middle[8da661eace2d3835]::ty::context::TyCtxt>>::super_fold_with::<rustc_trait_selection[4a6c75efdfd4ddbc]::traits::normalize::AssocTypeNormalizer>
  42:     0x7f8d5a9d092a - <&rustc_middle[8da661eace2d3835]::ty::list::RawList<(), rustc_middle[8da661eace2d3835]::ty::Ty> as rustc_type_ir[55389d109bf31374]::fold::TypeFoldable<rustc_middle[8da661eace2d3835]::ty::context::TyCtxt>>::fold_with::<rustc_trait_selection[4a6c75efdfd4ddbc]::traits::normalize::AssocTypeNormalizer>
  43:     0x7f8d5acee5f6 - <rustc_trait_selection[4a6c75efdfd4ddbc]::traits::engine::ObligationCtxt<rustc_trait_selection[4a6c75efdfd4ddbc]::traits::FulfillmentError>>::normalize::<rustc_type_ir[55389d109bf31374]::ty_kind::FnSig<rustc_middle[8da661eace2d3835]::ty::context::TyCtxt>>
  44:     0x7f8d5b1b8413 - rustc_hir_analysis[7c814f732fcce32a]::check::compare_impl_item::compare_impl_item
  45:     0x7f8d5b1b6ef3 - rustc_query_impl[901efb9d08f37e5f]::query_impl::compare_impl_item::invoke_provider_fn::__rust_begin_short_backtrace
  46:     0x7f8d5b36dd2c - rustc_query_impl[901efb9d08f37e5f]::execution::try_execute_query::<rustc_data_structures[9b2faa242a22c885]::vec_cache::VecCache<rustc_span[868b5fcbf14cfd1b]::def_id::LocalDefId, rustc_middle[8da661eace2d3835]::query::erase::ErasedData<[u8; 1usize]>, rustc_middle[8da661eace2d3835]::dep_graph::graph::DepNodeIndex>, {rustc_query_impl[901efb9d08f37e5f]::QueryFlags { is_anon: false, is_depth_limit: false, is_feedable: false }}, false>
  47:     0x7f8d5b36d811 - rustc_query_impl[901efb9d08f37e5f]::query_impl::compare_impl_item::get_query_non_incr::__rust_end_short_backtrace
  48:     0x7f8d5b370b21 - rustc_hir_analysis[7c814f732fcce32a]::check::check::check_item_type
  49:     0x7f8d5b36e55c - rustc_hir_analysis[7c814f732fcce32a]::check::wfcheck::check_well_formed
  50:     0x7f8d5b36e535 - rustc_query_impl[901efb9d08f37e5f]::query_impl::check_well_formed::invoke_provider_fn::__rust_begin_short_backtrace
  51:     0x7f8d5b36dd2c - rustc_query_impl[901efb9d08f37e5f]::execution::try_execute_query::<rustc_data_structures[9b2faa242a22c885]::vec_cache::VecCache<rustc_span[868b5fcbf14cfd1b]::def_id::LocalDefId, rustc_middle[8da661eace2d3835]::query::erase::ErasedData<[u8; 1usize]>, rustc_middle[8da661eace2d3835]::dep_graph::graph::DepNodeIndex>, {rustc_query_impl[901efb9d08f37e5f]::QueryFlags { is_anon: false, is_depth_limit: false, is_feedable: false }}, false>
  52:     0x7f8d5b36da96 - rustc_query_impl[901efb9d08f37e5f]::query_impl::check_well_formed::get_query_non_incr::__rust_end_short_backtrace
  53:     0x7f8d5b36a72c - rustc_hir_analysis[7c814f732fcce32a]::check::wfcheck::check_type_wf
  54:     0x7f8d5b36a625 - rustc_query_impl[901efb9d08f37e5f]::query_impl::check_type_wf::invoke_provider_fn::__rust_begin_short_backtrace
  55:     0x7f8d5ba0c393 - rustc_query_impl[901efb9d08f37e5f]::execution::try_execute_query::<rustc_middle[8da661eace2d3835]::query::caches::SingleCache<rustc_middle[8da661eace2d3835]::query::erase::ErasedData<[u8; 1usize]>>, {rustc_query_impl[901efb9d08f37e5f]::QueryFlags { is_anon: false, is_depth_limit: false, is_feedable: false }}, false>
  56:     0x7f8d5ba0c14e - rustc_query_impl[901efb9d08f37e5f]::query_impl::check_type_wf::get_query_non_incr::__rust_end_short_backtrace
  57:     0x7f8d5afea2f6 - rustc_hir_analysis[7c814f732fcce32a]::check_crate
  58:     0x7f8d5afee396 - rustc_interface[bed7059fa4e4e59b]::passes::analysis
  59:     0x7f8d5ba0dc59 - rustc_query_impl[901efb9d08f37e5f]::execution::try_execute_query::<rustc_middle[8da661eace2d3835]::query::caches::SingleCache<rustc_middle[8da661eace2d3835]::query::erase::ErasedData<[u8; 0usize]>>, {rustc_query_impl[901efb9d08f37e5f]::QueryFlags { is_anon: false, is_depth_limit: false, is_feedable: false }}, false>
  60:     0x7f8d5ba0d888 - rustc_query_impl[901efb9d08f37e5f]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  61:     0x7f8d5ba5348b - rustc_interface[bed7059fa4e4e59b]::interface::run_compiler::<(), rustc_driver_impl[10da71731441b30c]::run_compiler::{closure#0}>::{closure#1}
  62:     0x7f8d5b9e673e - std[85f758501382144e]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[bed7059fa4e4e59b]::util::run_in_thread_with_globals<rustc_interface[bed7059fa4e4e59b]::util::run_in_thread_pool_with_globals<rustc_interface[bed7059fa4e4e59b]::interface::run_compiler<(), rustc_driver_impl[10da71731441b30c]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
  63:     0x7f8d5b9e6e20 - <std[85f758501382144e]::thread::lifecycle::spawn_unchecked<rustc_interface[bed7059fa4e4e59b]::util::run_in_thread_with_globals<rustc_interface[bed7059fa4e4e59b]::util::run_in_thread_pool_with_globals<rustc_interface[bed7059fa4e4e59b]::interface::run_compiler<(), rustc_driver_impl[10da71731441b30c]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[8789ce5c2077b08]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  64:     0x7f8d5b9e7cac - <std[85f758501382144e]::sys::thread::unix::Thread>::new::thread_start
  65:     0x7f8d554a598b - <unknown>
  66:     0x7f8d55529a0c - <unknown>
  67:                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.95.0-nightly (d8b2222b1 2026-02-22) running on x86_64-unknown-linux-gnu

note: compiler flags: -Z validate-mir -Z dump-mir-dir=dir

query stack during panic:
#0 [mir_drops_elaborated_and_const_checked] elaborating drops for `<impl at /tmp/icemaker_global_tempdir.Oy9yDV5qqc2b/rustc_testrunner_tmpdir_reporting.LyErRaNwc3AJ/mvce.rs:10:1: 10:17>::arr::{constant#0}`
#1 [mir_for_ctfe] caching mir of `<impl at /tmp/icemaker_global_tempdir.Oy9yDV5qqc2b/rustc_testrunner_tmpdir_reporting.LyErRaNwc3AJ/mvce.rs:10:1: 10:17>::arr::{constant#0}` for CTFE
#2 [eval_to_allocation_raw] const-evaluating + checking `<impl at /tmp/icemaker_global_tempdir.Oy9yDV5qqc2b/rustc_testrunner_tmpdir_reporting.LyErRaNwc3AJ/mvce.rs:10:1: 10:17>::arr::{constant#0}`
#3 [eval_to_valtree] evaluating type-level constant
#4 [compare_impl_item] checking assoc item `<impl at /tmp/icemaker_global_tempdir.Oy9yDV5qqc2b/rustc_testrunner_tmpdir_reporting.LyErRaNwc3AJ/mvce.rs:10:1: 10:17>::arr` is compatible with trait definition
#5 [check_well_formed] checking that `<impl at /tmp/icemaker_global_tempdir.Oy9yDV5qqc2b/rustc_testrunner_tmpdir_reporting.LyErRaNwc3AJ/mvce.rs:10:1: 10:17>` is well-formed
#6 [check_type_wf] checking that types are well-formed
#7 [analysis] running analysis passes on crate `mvce`
end of query stack
error: aborting due to 1 previous error; 1 warning emitted


@rustbot label +F-min_generic_const_args +-Zvalidate-mir

Metadata

Metadata

Assignees

No one assigned

    Labels

    -Zvalidate-mirUnstable option: MIR validationC-bugCategory: This is a bug.F-min_generic_const_args`#![feature(min_generic_const_args)]`I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions