Closed
Description
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..
Code
#![feature(generic_associated_types)]
struct Node<T, const N : usize, const P : usize> {
data : [[T; N]; P]
}
trait NodeT<const N : usize> {
type Node<T>;
}
struct NodeLookup;
macro_rules! impl_lookup {
($($n:literal)*) => { $(
impl NodeT<$n> for NodeLookup {
type Node<T> = Node<T, $n, {$n*$n}>;
}
)* }
}
impl_lookup!(1 2 3 4);
fn main() {
}
Meta
rustc --version --verbose
:
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 output
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
Metadata
Metadata
Assignees
Labels
Area: Generic associated types (GATs)Category: This is a bug.`#![feature(generic_associated_types)]` a.k.a. GATsIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️Relevant to the compiler team, which will review and decide on the PR/issue.ICE tracked in rust-lang/glacier.This issue requires a nightly compiler in some way.