ICE: `SizeSkeleton::compute` panics on complex recursive type alias involving Pointee::Metadata
Open
Nobody has claimed this yet.
A-associated-items
A-trait-system
C-bug
fixed-by-next-solver
I-ICE
S-bug-has-test
S-has-mcve
T-compiler
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.1k
- PR merge metrics
- PR metrics pending
Description
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
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 compiling the reported reproducer with the default and globally enabled trait solvers, then inspect the stack's paths through compiler/rustc_middle/src/ty/sty.rs, rustc_trait_selection, and rustc_ty_utils. Done means the recursive alias case no longer triggers an ICE and instead produces a compiler diagnostic, matching the non-panicking solver behavior.
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
- Needs clarification
- Newbie friendliness
- 38/100