Skip to content

ICE: SizeSkeleton::compute panics on complex recursive type alias involving Pointee::Metadata #151069

Description

@trait-Cong

I tried this code:

trait Trait {
    type Assoc2;
}
struct Bar;
impl Trait for Bar
where
    <Bar as Trait>::Assoc2: Trait,
{
    type Assoc2 = ();
}
struct Foo {
    field: <Bar as Trait>::Assoc2,
}
static FOO2: &Foo = 0;
fn main() {}

The compiler behavior differs depending on the release channel and trait solver used:

Release channel Result
current Stable ICE
current Nightly (default solver) ICE
Nightly + -Znext-solver=globally error

Meta

rustc --version --verbose:

rustc 1.94.0-nightly (f57eac1bf 2026-01-10)
binary: rustc
commit-hash: f57eac1bf98cb5d578e3364b64365ec398c137df
commit-date: 2026-01-10
host: x86_64-unknown-linux-gnu
release: 1.94.0-nightly
LLVM version: 21.1.8
Backtrace

thread 'rustc' panicked at /rustc-dev/f57eac1bf98cb5d578e3364b64365ec398c137df/compiler/rustc_middle/src/ty/sty.rs:1762:86:
Box<dyn Any>
stack backtrace:
   0:     0x7f92b7a20c4b - <std[14974c2a6d31bd09]::backtrace::Backtrace>::create
   1:     0x7f92b7a20b95 - <std[14974c2a6d31bd09]::backtrace::Backtrace>::force_capture
   2:     0x7f92b6a165c7 - std[14974c2a6d31bd09]::panicking::update_hook::<alloc[97bcaa3c9f42b50c]::boxed::Box<rustc_driver_impl[8626402415690959]::install_ice_hook::{closure#1}>>::{closure#0}
   3:     0x7f92b7a34062 - std[14974c2a6d31bd09]::panicking::panic_with_hook
   4:     0x7f92b6a53251 - std[14974c2a6d31bd09]::panicking::begin_panic::<rustc_errors[cacf81fbc0306139]::ExplicitBug>::{closure#0}
   5:     0x7f92b6a43506 - std[14974c2a6d31bd09]::sys::backtrace::__rust_end_short_backtrace::<std[14974c2a6d31bd09]::panicking::begin_panic<rustc_errors[cacf81fbc0306139]::ExplicitBug>::{closure#0}, !>
   6:     0x7f92b6a40b49 - std[14974c2a6d31bd09]::panicking::begin_panic::<rustc_errors[cacf81fbc0306139]::ExplicitBug>
   7:     0x7f92b6a70f91 - <rustc_errors[cacf81fbc0306139]::diagnostic::BugAbort as rustc_errors[cacf81fbc0306139]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
   8:     0x7f92b7022289 - rustc_middle[42069f076602ef26]::util::bug::opt_span_bug_fmt::<rustc_span[ea6610cf11a1023c]::span_encoding::Span>::{closure#0}
   9:     0x7f92b7022412 - rustc_middle[42069f076602ef26]::ty::context::tls::with_opt::<rustc_middle[42069f076602ef26]::util::bug::opt_span_bug_fmt<rustc_span[ea6610cf11a1023c]::span_encoding::Span>::{closure#0}, !>::{closure#0}
  10:     0x7f92b701352b - rustc_middle[42069f076602ef26]::ty::context::tls::with_context_opt::<rustc_middle[42069f076602ef26]::ty::context::tls::with_opt<rustc_middle[42069f076602ef26]::util::bug::opt_span_bug_fmt<rustc_span[ea6610cf11a1023c]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
  11:     0x7f92b4a60014 - rustc_middle[42069f076602ef26]::util::bug::bug_fmt
  12:     0x7f92b8226f01 - rustc_trait_selection[15cd687e6e3a4627]::traits::project::confirm_candidate
  13:     0x7f92b8201c4b - rustc_trait_selection[15cd687e6e3a4627]::traits::project::normalize_projection_term
  14:     0x7f92b8995500 - rustc_traits[d900ce35b51d4320]::normalize_projection_ty::normalize_canonicalized_projection
  15:     0x7f92b8994f02 - rustc_query_impl[7762d22649c04fd8]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[7762d22649c04fd8]::query_impl::normalize_canonicalized_projection::dynamic_query::{closure#2}::{closure#0}, rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 8usize]>>
  16:     0x7f92b8994025 - rustc_query_system[4067c90f9d31d9ad]::query::plumbing::try_execute_query::<rustc_query_impl[7762d22649c04fd8]::DynamicConfig<rustc_query_system[4067c90f9d31d9ad]::query::caches::DefaultCache<rustc_type_ir[2e637ce3bc4e2c58]::canonical::CanonicalQueryInput<rustc_middle[42069f076602ef26]::ty::context::TyCtxt, rustc_middle[42069f076602ef26]::ty::ParamEnvAnd<rustc_type_ir[2e637ce3bc4e2c58]::predicate::AliasTerm<rustc_middle[42069f076602ef26]::ty::context::TyCtxt>>>, rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[7762d22649c04fd8]::plumbing::QueryCtxt, false>
  17:     0x7f92b8993c6a - rustc_query_impl[7762d22649c04fd8]::query_impl::normalize_canonicalized_projection::get_query_non_incr::__rust_end_short_backtrace
  18:     0x7f92b81f0ab3 - <rustc_trait_selection[15cd687e6e3a4627]::traits::query::normalize::QueryNormalizer>::try_fold_free_or_assoc
  19:     0x7f92b81efb7e - <rustc_trait_selection[15cd687e6e3a4627]::traits::query::normalize::QueryNormalizer as rustc_type_ir[2e637ce3bc4e2c58]::fold::FallibleTypeFolder<rustc_middle[42069f076602ef26]::ty::context::TyCtxt>>::try_fold_ty
  20:     0x7f92b81e9cf6 - <rustc_traits[d900ce35b51d4320]::normalize_erasing_regions::provide::{closure#0} as core[75fca27d79ab979d]::ops::function::FnOnce<(rustc_middle[42069f076602ef26]::ty::context::TyCtxt, rustc_middle[42069f076602ef26]::ty::PseudoCanonicalInput<rustc_middle[42069f076602ef26]::ty::generic_args::GenericArg>)>>::call_once
  21:     0x7f92b81e9860 - rustc_query_impl[7762d22649c04fd8]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[7762d22649c04fd8]::query_impl::try_normalize_generic_arg_after_erasing_regions::dynamic_query::{closure#2}::{closure#0}, rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 8usize]>>
  22:     0x7f92b81e8a8d - rustc_query_system[4067c90f9d31d9ad]::query::plumbing::try_execute_query::<rustc_query_impl[7762d22649c04fd8]::DynamicConfig<rustc_query_system[4067c90f9d31d9ad]::query::caches::DefaultCache<rustc_middle[42069f076602ef26]::ty::PseudoCanonicalInput<rustc_middle[42069f076602ef26]::ty::generic_args::GenericArg>, rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[7762d22649c04fd8]::plumbing::QueryCtxt, false>
  23:     0x7f92b81e8758 - rustc_query_impl[7762d22649c04fd8]::query_impl::try_normalize_generic_arg_after_erasing_regions::get_query_non_incr::__rust_end_short_backtrace
  24:     0x7f92b81e7f5a - <rustc_middle[42069f076602ef26]::ty::normalize_erasing_regions::TryNormalizeAfterErasingRegionsFolder as rustc_type_ir[2e637ce3bc4e2c58]::fold::FallibleTypeFolder<rustc_middle[42069f076602ef26]::ty::context::TyCtxt>>::try_fold_ty
  25:     0x7f92b883bd61 - rustc_ty_utils[b80a22a8b24a11b7]::layout::layout_of_uncached
  26:     0x7f92b8834dd7 - rustc_ty_utils[b80a22a8b24a11b7]::layout::layout_of
  27:     0x7f92b8834d40 - rustc_query_impl[7762d22649c04fd8]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[7762d22649c04fd8]::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 16usize]>>
  28:     0x7f92b8833c1d - rustc_query_system[4067c90f9d31d9ad]::query::plumbing::try_execute_query::<rustc_query_impl[7762d22649c04fd8]::DynamicConfig<rustc_query_system[4067c90f9d31d9ad]::query::caches::DefaultCache<rustc_middle[42069f076602ef26]::ty::PseudoCanonicalInput<rustc_middle[42069f076602ef26]::ty::Ty>, rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 16usize]>>, false, true, false>, rustc_query_impl[7762d22649c04fd8]::plumbing::QueryCtxt, false>
  29:     0x7f92b8833834 - rustc_query_impl[7762d22649c04fd8]::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
  30:     0x7f92b8834f3e - rustc_ty_utils[b80a22a8b24a11b7]::layout::layout_of
  31:     0x7f92b8834d40 - rustc_query_impl[7762d22649c04fd8]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[7762d22649c04fd8]::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 16usize]>>
  32:     0x7f92b8833c1d - rustc_query_system[4067c90f9d31d9ad]::query::plumbing::try_execute_query::<rustc_query_impl[7762d22649c04fd8]::DynamicConfig<rustc_query_system[4067c90f9d31d9ad]::query::caches::DefaultCache<rustc_middle[42069f076602ef26]::ty::PseudoCanonicalInput<rustc_middle[42069f076602ef26]::ty::Ty>, rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 16usize]>>, false, true, false>, rustc_query_impl[7762d22649c04fd8]::plumbing::QueryCtxt, false>
  33:     0x7f92b8833834 - rustc_query_impl[7762d22649c04fd8]::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
  34:     0x7f92b85ec9cf - rustc_hir_analysis[439a21a4da756827]::check::check::check_item_type
  35:     0x7f92b85e4af6 - rustc_hir_analysis[439a21a4da756827]::check::wfcheck::check_well_formed
  36:     0x7f92b85e4ad7 - rustc_query_impl[7762d22649c04fd8]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[7762d22649c04fd8]::query_impl::check_well_formed::dynamic_query::{closure#2}::{closure#0}, rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 1usize]>>
  37:     0x7f92b85e434d - rustc_query_system[4067c90f9d31d9ad]::query::plumbing::try_execute_query::<rustc_query_impl[7762d22649c04fd8]::DynamicConfig<rustc_data_structures[5b2e5bcce01f3ea3]::vec_cache::VecCache<rustc_span[ea6610cf11a1023c]::def_id::LocalDefId, rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 1usize]>, rustc_query_system[4067c90f9d31d9ad]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[7762d22649c04fd8]::plumbing::QueryCtxt, false>
  38:     0x7f92b85e3e56 - rustc_query_impl[7762d22649c04fd8]::query_impl::check_well_formed::get_query_non_incr::__rust_end_short_backtrace
  39:     0x7f92b85e15f0 - rustc_hir_analysis[439a21a4da756827]::check::wfcheck::check_type_wf
  40:     0x7f92b85e14dd - rustc_query_impl[7762d22649c04fd8]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[7762d22649c04fd8]::query_impl::check_type_wf::dynamic_query::{closure#2}::{closure#0}, rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 1usize]>>
  41:     0x7f92b915b408 - rustc_query_system[4067c90f9d31d9ad]::query::plumbing::try_execute_query::<rustc_query_impl[7762d22649c04fd8]::DynamicConfig<rustc_query_system[4067c90f9d31d9ad]::query::caches::SingleCache<rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[7762d22649c04fd8]::plumbing::QueryCtxt, false>
  42:     0x7f92b915b1ce - rustc_query_impl[7762d22649c04fd8]::query_impl::check_type_wf::get_query_non_incr::__rust_end_short_backtrace
  43:     0x7f92b8a53096 - rustc_hir_analysis[439a21a4da756827]::check_crate
  44:     0x7f92b8237f5b - rustc_interface[90afb413dadbe4f1]::passes::analysis
  45:     0x7f92b8237ba7 - rustc_query_impl[7762d22649c04fd8]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[7762d22649c04fd8]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 0usize]>>
  46:     0x7f92b915cbe6 - rustc_query_system[4067c90f9d31d9ad]::query::plumbing::try_execute_query::<rustc_query_impl[7762d22649c04fd8]::DynamicConfig<rustc_query_system[4067c90f9d31d9ad]::query::caches::SingleCache<rustc_middle[42069f076602ef26]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[7762d22649c04fd8]::plumbing::QueryCtxt, false>
  47:     0x7f92b915c948 - rustc_query_impl[7762d22649c04fd8]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  48:     0x7f92b9324754 - <rustc_interface[90afb413dadbe4f1]::passes::create_and_enter_global_ctxt<core[75fca27d79ab979d]::option::Option<rustc_interface[90afb413dadbe4f1]::queries::Linker>, rustc_driver_impl[8626402415690959]::run_compiler::{closure#0}::{closure#2}>::{closure#2} as core[75fca27d79ab979d]::ops::function::FnOnce<(&rustc_session[7c34b462142e1273]::session::Session, rustc_middle[42069f076602ef26]::ty::context::CurrentGcx, alloc[97bcaa3c9f42b50c]::sync::Arc<rustc_data_structures[5b2e5bcce01f3ea3]::jobserver::Proxy>, &std[14974c2a6d31bd09]::sync::once_lock::OnceLock<rustc_middle[42069f076602ef26]::ty::context::GlobalCtxt>, &rustc_data_structures[5b2e5bcce01f3ea3]::sync::worker_local::WorkerLocal<rustc_middle[42069f076602ef26]::arena::Arena>, &rustc_data_structures[5b2e5bcce01f3ea3]::sync::worker_local::WorkerLocal<rustc_hir[a6c28dd0effa383c]::Arena>, rustc_driver_impl[8626402415690959]::run_compiler::{closure#0}::{closure#2})>>::call_once::{shim:vtable#0}
  49:     0x7f92b921cf98 - rustc_interface[90afb413dadbe4f1]::interface::run_compiler::<(), rustc_driver_impl[8626402415690959]::run_compiler::{closure#0}>::{closure#1}
  50:     0x7f92b9065f4e - std[14974c2a6d31bd09]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[90afb413dadbe4f1]::util::run_in_thread_with_globals<rustc_interface[90afb413dadbe4f1]::util::run_in_thread_pool_with_globals<rustc_interface[90afb413dadbe4f1]::interface::run_compiler<(), rustc_driver_impl[8626402415690959]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
  51:     0x7f92b9065d20 - <std[14974c2a6d31bd09]::thread::lifecycle::spawn_unchecked<rustc_interface[90afb413dadbe4f1]::util::run_in_thread_with_globals<rustc_interface[90afb413dadbe4f1]::util::run_in_thread_pool_with_globals<rustc_interface[90afb413dadbe4f1]::interface::run_compiler<(), rustc_driver_impl[8626402415690959]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[75fca27d79ab979d]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  52:     0x7f92b9068438 - <std[14974c2a6d31bd09]::sys::thread::unix::Thread>::new::thread_start
  53:     0x7f92b2a94ac3 - start_thread
                               at ./nptl/pthread_create.c:442:8
  54:     0x7f92b2b268c0 - __GI___clone3
                               at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81:0
  55:                0x0 - <unknown>


rustc version: 1.94.0-nightly (f57eac1bf 2026-01-10)
platform: x86_64-unknown-linux-gnu

query stack during panic:
#0 [normalize_canonicalized_projection] normalizing `<Foo as core::ptr::metadata::Pointee>::Metadata`
#1 [try_normalize_generic_arg_after_erasing_regions] normalizing `<Foo as core::ptr::metadata::Pointee>::Metadata`
#2 [layout_of] computing layout of `&Foo`
#3 [layout_of] computing layout of `&'static Foo`
#4 [check_well_formed] checking that `FOO2` is well-formed
#5 [check_type_wf] checking that types are well-formed
#6 [analysis] running analysis passes on crate `after`
end of query stack

Activity

  1. added
    needs-triageThis issue may need triage. Remove when done. See docs forge.rust-lang.org/release/issue-triaging
    on Jan 13, 2026
  2. added
    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.
    on Jan 13, 2026
  3. added
    A-associated-itemsArea: Associated items (types, constants & functions)
    fixed-by-next-solverFixed by the next-generation trait solver, `-Znext-solver`.
    and removed
    needs-triageThis issue may need triage. Remove when done. See docs forge.rust-lang.org/release/issue-triaging
    on Jan 13, 2026
  4. added
    S-has-mcveStatus: A Minimal Complete and Verifiable Example has been found for this issue
    S-bug-has-testStatus: This bug is tracked inside the repo by a `known-bug` test.
    and removed on Jun 27, 2026
  5. added 3 commits that reference this issue on Oct 7, 2026
  6. added a commit that references this issue on Oct 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-associated-itemsArea: Associated items (types, constants & functions)A-trait-systemArea: Trait systemC-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️S-bug-has-testStatus: This bug is tracked inside the repo by a `known-bug` test.S-has-mcveStatus: A Minimal Complete and Verifiable Example has been found for this issueT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.fixed-by-next-solverFixed by the next-generation trait solver, `-Znext-solver`.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions