The compiler crashes with an internal error on the following MWE of a GAT workaround attempt to current const generics limitations, i.e., not being able to just do {N*N} (or rather pow(2, N) in my real code). There is no crash if T is fixed to some type, i.e, GATs are not needed, however, the idea would be to limit “trait bound bloat” by only having to repeat NodeLookup : NodeT<N> throughout the code without T and its trait bounds, etc..
rustc 1.64.0-nightly (ddcbba036 2022-06-29)
binary: rustc
commit-hash: ddcbba036aee08f0709f98a92a342a278eae5c05
commit-date: 2022-06-29
host: aarch64-apple-darwin
release: 1.64.0-nightly
LLVM version: 14.0.6
error: internal compiler error: /rustc/ddcbba036aee08f0709f98a92a342a278eae5c05/compiler/rustc_middle/src/ty/fold.rs:756:29: unexpected bound ty in binder: BoundTy { var: 0, kind: Param("T") }
thread 'rustc' panicked at 'Box<dyn Any>', /rustc/ddcbba036aee08f0709f98a92a342a278eae5c05/compiler/rustc_errors/src/lib.rs:1391:9
stack backtrace:
0: 0x10111ff18 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h094534642b0a9537
1: 0x10116cab4 - core::fmt::write::he79b8cc7db6af844
2: 0x101112f7c - std::io::Write::write_fmt::h9824dce6dc163d2c
3: 0x101122b5c - std::panicking::default_hook::{{closure}}::h3cd2810b91c69805
4: 0x1011228c4 - std::panicking::default_hook::hddba5976d502416b
5: 0x1085cb5f4 - rustc_driver[f51bca0c71cdd034]::DEFAULT_HOOK::{closure#0}::{closure#0}
6: 0x10112312c - std::panicking::rust_panic_with_hook::h94731f9d6cc315f3
7: 0x10c0aa758 - std[ec5bd7e3f33f3027]::panicking::begin_panic::<rustc_errors[77f389aec993a0ef]::ExplicitBug>::{closure#0}
8: 0x10c0a86cc - std[ec5bd7e3f33f3027]::sys_common::backtrace::__rust_end_short_backtrace::<std[ec5bd7e3f33f3027]::panicking::begin_panic<rustc_errors[77f389aec993a0ef]::ExplicitBug>::{closure#0}, !>
9: 0x10c509f04 - std[ec5bd7e3f33f3027]::panicking::begin_panic::<rustc_errors[77f389aec993a0ef]::ExplicitBug>
10: 0x10c00bc50 - std[ec5bd7e3f33f3027]::panic::panic_any::<rustc_errors[77f389aec993a0ef]::ExplicitBug>
11: 0x10c0064d4 - <rustc_errors[77f389aec993a0ef]::HandlerInner>::bug::<&alloc[cde6e00f4e7b7126]::string::String>
12: 0x10c0060a0 - <rustc_errors[77f389aec993a0ef]::Handler>::bug::<&alloc[cde6e00f4e7b7126]::string::String>
13: 0x10c0be8b0 - rustc_middle[9331575e900b72f8]::ty::context::tls::with_opt::<rustc_middle[9331575e900b72f8]::util::bug::opt_span_bug_fmt<rustc_span[b8e5c2445f520dcd]::span_encoding::Span>::{closure#0}, ()>
14: 0x10c0c0408 - rustc_middle[9331575e900b72f8]::util::bug::opt_span_bug_fmt::<rustc_span[b8e5c2445f520dcd]::span_encoding::Span>
15: 0x10c50c650 - rustc_middle[9331575e900b72f8]::util::bug::bug_fmt
16: 0x10be5ce1c - <rustc_middle[9331575e900b72f8]::ty::context::TyCtxt>::replace_late_bound_regions_uncached::<rustc_middle[9331575e900b72f8]::ty::PredicateKind, <rustc_middle[9331575e900b72f8]::ty::context::TyCtxt>::replace_late_bound_regions<rustc_middle[9331575e900b72f8]::ty::PredicateKind, <rustc_middle[9331575e900b72f8]::ty::context::TyCtxt>::anonymize_late_bound_regions<rustc_middle[9331575e900b72f8]::ty::PredicateKind>::{closure#0}>::{closure#0}>::{closure#0}
17: 0x10c08da1c - <rustc_middle[9331575e900b72f8]::ty::fold::BoundVarReplacer as rustc_middle[9331575e900b72f8]::ty::fold::TypeFolder>::fold_ty
18: 0x10be40f88 - <&rustc_middle[9331575e900b72f8]::ty::list::List<rustc_middle[9331575e900b72f8]::ty::subst::GenericArg> as rustc_middle[9331575e900b72f8]::ty::fold::TypeFoldable>::try_fold_with::<rustc_middle[9331575e900b72f8]::ty::fold::BoundVarReplacer>
19: 0x10be7082c - <rustc_middle[9331575e900b72f8]::ty::PredicateKind as rustc_middle[9331575e900b72f8]::ty::fold::TypeFoldable>::fold_with::<rustc_middle[9331575e900b72f8]::ty::fold::BoundVarReplacer>
20: 0x10be582cc - <rustc_middle[9331575e900b72f8]::ty::context::TyCtxt>::anonymize_late_bound_regions::<rustc_middle[9331575e900b72f8]::ty::PredicateKind>
21: 0x10bdfe5f0 - <rustc_middle[9331575e900b72f8]::ty::erase_regions::RegionEraserVisitor as rustc_middle[9331575e900b72f8]::ty::fold::FallibleTypeFolder>::try_fold_binder::<rustc_middle[9331575e900b72f8]::ty::PredicateKind>
22: 0x10be3effc - <&rustc_middle[9331575e900b72f8]::ty::list::List<rustc_middle[9331575e900b72f8]::ty::Predicate> as rustc_middle[9331575e900b72f8]::ty::fold::TypeFoldable>::try_fold_with::<rustc_middle[9331575e900b72f8]::ty::erase_regions::RegionEraserVisitor>
23: 0x10bdbf7f4 - <rustc_trait_selection[b4f82a16548071ea]::traits::project::AssocTypeNormalizer as rustc_middle[9331575e900b72f8]::ty::fold::TypeFolder>::fold_const
24: 0x10be44734 - <&rustc_middle[9331575e900b72f8]::ty::list::List<rustc_middle[9331575e900b72f8]::ty::subst::GenericArg> as rustc_middle[9331575e900b72f8]::ty::fold::TypeFoldable>::try_fold_with::<rustc_trait_selection[b4f82a16548071ea]::traits::project::AssocTypeNormalizer>
25: 0x10be71208 - <rustc_middle[9331575e900b72f8]::ty::Ty as rustc_middle[9331575e900b72f8]::ty::fold::TypeSuperFoldable>::super_fold_with::<rustc_trait_selection[b4f82a16548071ea]::traits::project::AssocTypeNormalizer>
26: 0x10bdbb148 - <rustc_trait_selection[b4f82a16548071ea]::traits::project::AssocTypeNormalizer as rustc_middle[9331575e900b72f8]::ty::fold::TypeFolder>::fold_ty
27: 0x10bdc04dc - rustc_trait_selection[b4f82a16548071ea]::traits::project::opt_normalize_projection_type
28: 0x10bdbbd54 - rustc_trait_selection[b4f82a16548071ea]::traits::project::normalize_projection_type
29: 0x10bdbaf18 - <rustc_trait_selection[b4f82a16548071ea]::traits::project::AssocTypeNormalizer as rustc_middle[9331575e900b72f8]::ty::fold::TypeFolder>::fold_ty
30: 0x10ab6613c - <&rustc_middle[9331575e900b72f8]::ty::list::List<rustc_middle[9331575e900b72f8]::ty::subst::GenericArg> as rustc_middle[9331575e900b72f8]::ty::fold::TypeFoldable>::try_fold_with::<rustc_trait_selection[b4f82a16548071ea]::traits::project::AssocTypeNormalizer>
31: 0x10abe2fe8 - <rustc_middle[9331575e900b72f8]::ty::PredicateKind as rustc_middle[9331575e900b72f8]::ty::fold::TypeFoldable>::try_fold_with::<rustc_trait_selection[b4f82a16548071ea]::traits::project::AssocTypeNormalizer>
32: 0x10abf0724 - <rustc_middle[9331575e900b72f8]::ty::Predicate as rustc_middle[9331575e900b72f8]::ty::fold::TypeSuperFoldable>::super_fold_with::<rustc_trait_selection[b4f82a16548071ea]::traits::project::AssocTypeNormalizer>
33: 0x10ac5a1f4 - <rustc_trait_selection[b4f82a16548071ea]::traits::project::AssocTypeNormalizer>::fold::<rustc_middle[9331575e900b72f8]::ty::Predicate>
34: 0x10ac5e55c - rustc_trait_selection[b4f82a16548071ea]::traits::project::normalize::<rustc_middle[9331575e900b72f8]::ty::Predicate>
35: 0x10abb0a68 - <rustc_infer[45d40a8feb40e3fa]::infer::InferCtxtBuilder>::enter::<core[c82fdd3b01836480]::result::Result<(), rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>, rustc_typeck[67235f765db4edde]::check::compare_method::check_type_bounds::{closure#2}>
36: 0x10ac2b1f4 - rustc_typeck[67235f765db4edde]::check::compare_method::check_type_bounds
37: 0x10ac20290 - rustc_typeck[67235f765db4edde]::check::compare_method::compare_ty_impl
38: 0x10aac793c - rustc_typeck[67235f765db4edde]::check::check::check_item_type
39: 0x10aacaca0 - rustc_typeck[67235f765db4edde]::check::check::check_mod_item_types
40: 0x10b386704 - rustc_query_system[e247dafbc3a4ff98]::query::plumbing::try_execute_query::<rustc_query_impl[90b84e005b379a12]::plumbing::QueryCtxt, rustc_query_system[e247dafbc3a4ff98]::query::caches::DefaultCache<rustc_span[b8e5c2445f520dcd]::def_id::LocalDefId, ()>>
41: 0x10b42c6a0 - rustc_query_system[e247dafbc3a4ff98]::query::plumbing::get_query::<rustc_query_impl[90b84e005b379a12]::queries::check_mod_item_types, rustc_query_impl[90b84e005b379a12]::plumbing::QueryCtxt>
42: 0x10abdb8c8 - <rustc_session[24b5e5485ce21942]::session::Session>::time::<(), rustc_typeck[67235f765db4edde]::check_crate::{closure#6}>
43: 0x10ab8dfc4 - rustc_typeck[67235f765db4edde]::check_crate
44: 0x108656888 - rustc_interface[5cb818030c646550]::passes::analysis
45: 0x10b3b96f8 - rustc_query_system[e247dafbc3a4ff98]::query::plumbing::try_execute_query::<rustc_query_impl[90b84e005b379a12]::plumbing::QueryCtxt, rustc_query_system[e247dafbc3a4ff98]::query::caches::DefaultCache<(), core[c82fdd3b01836480]::result::Result<(), rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>>>
46: 0x10b457934 - rustc_query_system[e247dafbc3a4ff98]::query::plumbing::get_query::<rustc_query_impl[90b84e005b379a12]::queries::analysis, rustc_query_impl[90b84e005b379a12]::plumbing::QueryCtxt>
47: 0x10858d7e8 - <rustc_interface[5cb818030c646550]::passes::QueryContext>::enter::<rustc_driver[f51bca0c71cdd034]::run_compiler::{closure#1}::{closure#2}::{closure#3}, core[c82fdd3b01836480]::result::Result<(), rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>>
48: 0x1085717a4 - <rustc_interface[5cb818030c646550]::interface::Compiler>::enter::<rustc_driver[f51bca0c71cdd034]::run_compiler::{closure#1}::{closure#2}, core[c82fdd3b01836480]::result::Result<core[c82fdd3b01836480]::option::Option<rustc_interface[5cb818030c646550]::queries::Linker>, rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>>
49: 0x1085bd41c - rustc_span[b8e5c2445f520dcd]::with_source_map::<core[c82fdd3b01836480]::result::Result<(), rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>, rustc_interface[5cb818030c646550]::interface::create_compiler_and_run<core[c82fdd3b01836480]::result::Result<(), rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>, rustc_driver[f51bca0c71cdd034]::run_compiler::{closure#1}>::{closure#1}>
50: 0x108571f9c - <scoped_tls[c0f860eaab270d6e]::ScopedKey<rustc_span[b8e5c2445f520dcd]::SessionGlobals>>::set::<rustc_interface[5cb818030c646550]::interface::run_compiler<core[c82fdd3b01836480]::result::Result<(), rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>, rustc_driver[f51bca0c71cdd034]::run_compiler::{closure#1}>::{closure#0}, core[c82fdd3b01836480]::result::Result<(), rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>>
51: 0x10858fdd8 - std[ec5bd7e3f33f3027]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[5cb818030c646550]::util::run_in_thread_pool_with_globals<rustc_interface[5cb818030c646550]::interface::run_compiler<core[c82fdd3b01836480]::result::Result<(), rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>, rustc_driver[f51bca0c71cdd034]::run_compiler::{closure#1}>::{closure#0}, core[c82fdd3b01836480]::result::Result<(), rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>>::{closure#0}, core[c82fdd3b01836480]::result::Result<(), rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>>
52: 0x1085904a4 - <<std[ec5bd7e3f33f3027]::thread::Builder>::spawn_unchecked_<rustc_interface[5cb818030c646550]::util::run_in_thread_pool_with_globals<rustc_interface[5cb818030c646550]::interface::run_compiler<core[c82fdd3b01836480]::result::Result<(), rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>, rustc_driver[f51bca0c71cdd034]::run_compiler::{closure#1}>::{closure#0}, core[c82fdd3b01836480]::result::Result<(), rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>>::{closure#0}, core[c82fdd3b01836480]::result::Result<(), rustc_errors[77f389aec993a0ef]::ErrorGuaranteed>>::{closure#1} as core[c82fdd3b01836480]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
53: 0x10112b58c - std::sys::unix::thread::Thread::new::thread_start::h46c89a4ac1d16d95
54: 0x1a242226c - __pthread_deallocate
note: 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: rustc 1.64.0-nightly (ddcbba036 2022-06-29) running on aarch64-apple-darwin
query stack during panic:
#0 [check_mod_item_types] checking item types in top-level module
#1 [analysis] running analysis passes on this crate
end of query stack
error: aborting due to previous error
Backtrace
$ RUST_BACKTRACE=1 rustc crash.rs
error: internal compiler error: /rustc/ddcbba036aee08f0709f98a92a342a278eae5c05/compiler/rustc_middle/src/ty/fold.rs:756:29: unexpected bound ty in binder: BoundTy { var: 0, kind: Param("T") }
thread 'rustc' panicked at 'Box<dyn Any>', /rustc/ddcbba036aee08f0709f98a92a342a278eae5c05/compiler/rustc_errors/src/lib.rs:1391:9
stack backtrace:
0: std::panicking::begin_panic::<rustc_errors::ExplicitBug>
1: std::panic::panic_any::<rustc_errors::ExplicitBug>
2: <rustc_errors::HandlerInner>::bug::<&alloc::string::String>
3: <rustc_errors::Handler>::bug::<&alloc::string::String>
4: rustc_middle::ty::context::tls::with_opt::<rustc_middle::util::bug::opt_span_bug_fmt<rustc_span::span_encoding::Span>::{closure#0}, ()>
5: rustc_middle::util::bug::opt_span_bug_fmt::<rustc_span::span_encoding::Span>
6: rustc_middle::util::bug::bug_fmt
7: <rustc_middle::ty::context::TyCtxt>::replace_late_bound_regions_uncached::<rustc_middle::ty::PredicateKind, <rustc_middle::ty::context::TyCtxt>::replace_late_bound_regions<rustc_middle::ty::PredicateKind, <rustc_middle::ty::context::TyCtxt>::anonymize_late_bound_regions<rustc_middle::ty::PredicateKind>::{closure#0}>::{closure#0}>::{closure#0}
8: <rustc_middle::ty::fold::BoundVarReplacer as rustc_middle::ty::fold::TypeFolder>::fold_ty
9: <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::try_fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
10: <rustc_middle::ty::PredicateKind as rustc_middle::ty::fold::TypeFoldable>::fold_with::<rustc_middle::ty::fold::BoundVarReplacer>
11: <rustc_middle::ty::context::TyCtxt>::anonymize_late_bound_regions::<rustc_middle::ty::PredicateKind>
12: <rustc_middle::ty::erase_regions::RegionEraserVisitor as rustc_middle::ty::fold::FallibleTypeFolder>::try_fold_binder::<rustc_middle::ty::PredicateKind>
13: <&rustc_middle::ty::list::List<rustc_middle::ty::Predicate> as rustc_middle::ty::fold::TypeFoldable>::try_fold_with::<rustc_middle::ty::erase_regions::RegionEraserVisitor>
14: <rustc_trait_selection::traits::project::AssocTypeNormalizer as rustc_middle::ty::fold::TypeFolder>::fold_const
15: <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::try_fold_with::<rustc_trait_selection::traits::project::AssocTypeNormalizer>
16: <rustc_middle::ty::Ty as rustc_middle::ty::fold::TypeSuperFoldable>::super_fold_with::<rustc_trait_selection::traits::project::AssocTypeNormalizer>
17: <rustc_trait_selection::traits::project::AssocTypeNormalizer as rustc_middle::ty::fold::TypeFolder>::fold_ty
18: rustc_trait_selection::traits::project::opt_normalize_projection_type
19: rustc_trait_selection::traits::project::normalize_projection_type
20: <rustc_trait_selection::traits::project::AssocTypeNormalizer as rustc_middle::ty::fold::TypeFolder>::fold_ty
21: <&rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg> as rustc_middle::ty::fold::TypeFoldable>::try_fold_with::<rustc_trait_selection::traits::project::AssocTypeNormalizer>
22: <rustc_middle::ty::PredicateKind as rustc_middle::ty::fold::TypeFoldable>::try_fold_with::<rustc_trait_selection::traits::project::AssocTypeNormalizer>
23: <rustc_middle::ty::Predicate as rustc_middle::ty::fold::TypeSuperFoldable>::super_fold_with::<rustc_trait_selection::traits::project::AssocTypeNormalizer>
24: <rustc_trait_selection::traits::project::AssocTypeNormalizer>::fold::<rustc_middle::ty::Predicate>
25: rustc_trait_selection::traits::project::normalize::<rustc_middle::ty::Predicate>
26: <rustc_infer::infer::InferCtxtBuilder>::enter::<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_typeck::check::compare_method::check_type_bounds::{closure#2}>
27: rustc_typeck::check::compare_method::check_type_bounds
28: rustc_typeck::check::compare_method::compare_ty_impl
29: rustc_typeck::check::check::check_item_type
30: rustc_typeck::check::check::check_mod_item_types
31: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::plumbing::QueryCtxt, rustc_query_system::query::caches::DefaultCache<rustc_span::def_id::LocalDefId, ()>>
32: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::check_mod_item_types, rustc_query_impl::plumbing::QueryCtxt>
33: <rustc_session::session::Session>::time::<(), rustc_typeck::check_crate::{closure#6}>
34: rustc_typeck::check_crate
35: rustc_interface::passes::analysis
36: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::plumbing::QueryCtxt, rustc_query_system::query::caches::DefaultCache<(), core::result::Result<(), rustc_errors::ErrorGuaranteed>>>
37: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::analysis, rustc_query_impl::plumbing::QueryCtxt>
38: <rustc_interface::passes::QueryContext>::enter::<rustc_driver::run_compiler::{closure#1}::{closure#2}::{closure#3}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>
39: <rustc_interface::interface::Compiler>::enter::<rustc_driver::run_compiler::{closure#1}::{closure#2}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_errors::ErrorGuaranteed>>
40: rustc_span::with_source_map::<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_interface::interface::create_compiler_and_run<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#1}>
41: <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>::set::<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
note: 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: rustc 1.64.0-nightly (ddcbba036 2022-06-29) running on aarch64-apple-darwin
query stack during panic:
#0 [check_mod_item_types] checking item types in top-level module
#1 [analysis] running analysis passes on this crate
end of query stack
error: aborting due to previous error
The compiler crashes with an internal error on the following MWE of a GAT workaround attempt to current const generics limitations, i.e., not being able to just do
{N*N}(or ratherpow(2, N)in my real code). There is no crash ifTis fixed to some type, i.e, GATs are not needed, however, the idea would be to limit “trait bound bloat” by only having to repeatNodeLookup : NodeT<N>throughout the code withoutTand its trait bounds, etc..Code
Meta
rustc --version --verbose:Error output
Backtrace