Open
Description
Code
#![feature(generic_const_exprs)]
trait If<const COND: bool> {}
impl If<true> for () {}
trait IsZero<const N: u8> {
type Answer;
}
struct True;
struct False;
impl<const N: u8> IsZero<N> for ()
where (): If<{N == 0}> {
type Msg = True;
}
trait Foobar<const N: u8> {}
impl<const N: u8> Foobar<N> for ()
where (): IsZero<N, Answer = True> {}
impl<const N: u8> Foobar<{{ N }}> for ()
where (): IsZero<N, Answer = False> {}
fn main() {}
Meta
rustc --version --verbose
:
rustc 1.86.0-nightly (6171d944a 2025-02-10)
binary: rustc
commit-hash: 6171d944aea415a3023d4262e0895aa3b18c771f
commit-date: 2025-02-10
host: x86_64-apple-darwin
release: 1.86.0-nightly
LLVM version: 19.1.7
Error output
error[E0437]: type `Msg` is not a member of trait `IsZero`
--> 99357C67F6F090FB46F1AE6969F3170B7A4898BB1869E0ABA3D135CDD13E07A9_9.rs:16:5
|
16 | type Msg = True;
| ^^^^^^^^^^^^^^^^ not a member of trait `IsZero`
warning: the feature `generic_const_exprs` is incomplete and may not be safe to use and/or cause compiler crashes
--> 99357C67F6F090FB46F1AE6969F3170B7A4898BB1869E0ABA3D135CDD13E07A9_9.rs:2:12
|
2 | #![feature(generic_const_exprs)]
| ^^^^^^^^^^^^^^^^^^^
|
= note: see issue #76560 <https://github.com/rust-lang/rust/issues/76560> for more information
= note: `#[warn(incomplete_features)]` on by default
warning: unnecessary braces around block return value
--> 99357C67F6F090FB46F1AE6969F3170B7A4898BB1869E0ABA3D135CDD13E07A9_9.rs:24:27
|
24 | impl<const N: u8> Foobar<{{ N }}> for ()
| ^^ ^^
|
= note: `#[warn(unused_braces)]` on by default
help: remove these braces
|
24 - impl<const N: u8> Foobar<{{ N }}> for ()
24 + impl<const N: u8> Foobar<{N}> for ()
|
error[E0046]: not all trait items implemented, missing: `Answer`
--> 99357C67F6F090FB46F1AE6969F3170B7A4898BB1869E0ABA3D135CDD13E07A9_9.rs:14:1
|
8 | type Answer;
| ----------- `Answer` from trait
...
14 | / impl<const N: u8> IsZero<N> for ()
15 | | where (): If<{N == 0}> {
| |______________________^ missing `Answer` in implementation
Backtrace
thread 'rustc' panicked at /rustc/6171d944aea415a3023d4262e0895aa3b18c771f/compiler/rustc_type_ir/src/relate.rs:583:13:
var types encountered in structurally_relate_consts: ?1c ?1c
stack backtrace:
0: 0x1127b5b27 - std::backtrace::Backtrace::create::h6d90a196f2f6223b
1: 0x1127b5a75 - std::backtrace::Backtrace::force_capture::h14c0080cd8204a8a
2: 0x1104199a7 - std[4c3ceb34d8b64346]::panicking::update_hook::<alloc[611dd7130874e463]::boxed::Box<rustc_driver_impl[1cd32ebeda1fc3da]::install_ice_hook::{closure#1}>>::{closure#0}
3: 0x1127d1aea - std::panicking::rust_panic_with_hook::hba97df66e35043ea
4: 0x1127d1658 - std::panicking::begin_panic_handler::{{closure}}::h14e415cc76624c23
5: 0x1127cebc9 - std::sys::backtrace::__rust_end_short_backtrace::h4b6e15876d127937
6: 0x1127d129c - _rust_begin_unwind
7: 0x11591d04f - core::panicking::panic_fmt::h99616ca857228c7e
8: 0x1122e876d - rustc_type_ir[da05a308c66dee68]::relate::structurally_relate_consts::<rustc_middle[242d69f972ac9ef0]::ty::context::TyCtxt, rustc_type_ir[da05a308c66dee68]::relate::solver_relating::SolverRelating<rustc_infer[2a9fe557867ee04e]::infer::InferCtxt, rustc_middle[242d69f972ac9ef0]::ty::context::TyCtxt>>
9: 0x1122f08d2 - rustc_type_ir[da05a308c66dee68]::relate::combine::super_combine_consts::<rustc_infer[2a9fe557867ee04e]::infer::InferCtxt, rustc_middle[242d69f972ac9ef0]::ty::context::TyCtxt, rustc_type_ir[da05a308c66dee68]::relate::solver_relating::SolverRelating<rustc_infer[2a9fe557867ee04e]::infer::InferCtxt, rustc_middle[242d69f972ac9ef0]::ty::context::TyCtxt>>
10: 0x11231db78 - <rustc_middle[242d69f972ac9ef0]::ty::generic_args::GenericArg as rustc_type_ir[da05a308c66dee68]::relate::Relate<rustc_middle[242d69f972ac9ef0]::ty::context::TyCtxt>>::relate::<rustc_type_ir[da05a308c66dee68]::relate::solver_relating::SolverRelating<rustc_infer[2a9fe557867ee04e]::infer::InferCtxt, rustc_middle[242d69f972ac9ef0]::ty::context::TyCtxt>>
11: 0x11237cb61 - <rustc_next_trait_solver[a2e9d454815e15fa]::solve::eval_ctxt::EvalCtxt<rustc_trait_selection[d430e1c40be3746a]::solve::delegate::SolverDelegate, rustc_middle[242d69f972ac9ef0]::ty::context::TyCtxt>>::unify_query_var_values
12: 0x112577ec0 - <rustc_trait_selection[d430e1c40be3746a]::solve::inspect::analyse::InspectCandidate>::instantiate_nested_goals_and_opt_impl_args
13: 0x112574007 - <rustc_trait_selection[d430e1c40be3746a]::solve::fulfill::derive_errors::BestObligation as rustc_trait_selection[d430e1c40be3746a]::solve::inspect::analyse::ProofTreeVisitor>::visit_goal
14: 0x11257901b - <rustc_infer[2a9fe557867ee04e]::infer::InferCtxt as rustc_trait_selection[d430e1c40be3746a]::solve::inspect::analyse::ProofTreeInferCtxtExt>::visit_proof_tree_at_depth::<rustc_trait_selection[d430e1c40be3746a]::solve::fulfill::derive_errors::BestObligation>
15: 0x1124f79b2 - rustc_trait_selection[d430e1c40be3746a]::solve::fulfill::derive_errors::find_best_leaf_obligation
16: 0x1124fa8ab - <rustc_trait_selection[d430e1c40be3746a]::traits::FulfillmentError as rustc_infer[2a9fe557867ee04e]::traits::engine::FromSolverError<rustc_trait_selection[d430e1c40be3746a]::solve::fulfill::NextSolverError>>::from_solver_error
17: 0x1123b72cb - <core[271bb12f5570a4f8]::iter::adapters::map::Map<core[271bb12f5570a4f8]::iter::adapters::chain::Chain<core[271bb12f5570a4f8]::iter::adapters::map::Map<thin_vec[6d57abcffe3f30dd]::Drain<rustc_infer[2a9fe557867ee04e]::traits::Obligation<rustc_middle[242d69f972ac9ef0]::ty::predicate::Predicate>>, <rustc_trait_selection[d430e1c40be3746a]::solve::fulfill::FulfillmentCtxt<rustc_trait_selection[d430e1c40be3746a]::traits::FulfillmentError> as rustc_infer[2a9fe557867ee04e]::traits::engine::TraitEngine<rustc_trait_selection[d430e1c40be3746a]::traits::FulfillmentError>>::collect_remaining_errors::{closure#0}>, core[271bb12f5570a4f8]::iter::adapters::map::Map<thin_vec[6d57abcffe3f30dd]::Drain<rustc_infer[2a9fe557867ee04e]::traits::Obligation<rustc_middle[242d69f972ac9ef0]::ty::predicate::Predicate>>, <rustc_trait_selection[d430e1c40be3746a]::solve::fulfill::FulfillmentCtxt<rustc_trait_selection[d430e1c40be3746a]::traits::FulfillmentError> as rustc_infer[2a9fe557867ee04e]::traits::engine::TraitEngine<rustc_trait_selection[d430e1c40be3746a]::traits::FulfillmentError>>::collect_remaining_errors::{closure#1}>>, <rustc_trait_selection[d430e1c40be3746a]::solve::fulfill::FulfillmentCtxt<rustc_trait_selection[d430e1c40be3746a]::traits::FulfillmentError> as rustc_infer[2a9fe557867ee04e]::traits::engine::TraitEngine<rustc_trait_selection[d430e1c40be3746a]::traits::FulfillmentError>>::collect_remaining_errors::{closure#2}> as core[271bb12f5570a4f8]::iter::traits::iterator::Iterator>::next
18: 0x1124f913e - <rustc_trait_selection[d430e1c40be3746a]::solve::fulfill::FulfillmentCtxt<rustc_trait_selection[d430e1c40be3746a]::traits::FulfillmentError> as rustc_infer[2a9fe557867ee04e]::traits::engine::TraitEngine<rustc_trait_selection[d430e1c40be3746a]::traits::FulfillmentError>>::collect_remaining_errors
19: 0x112437a6d - <rustc_trait_selection[d430e1c40be3746a]::solve::fulfill::FulfillmentCtxt<rustc_trait_selection[d430e1c40be3746a]::traits::FulfillmentError> as rustc_infer[2a9fe557867ee04e]::traits::engine::TraitEngine<rustc_trait_selection[d430e1c40be3746a]::traits::FulfillmentError>>::select_all_or_error
20: 0x11257ce0c - rustc_trait_selection[d430e1c40be3746a]::traits::coherence::overlap
21: 0x11257b51b - rustc_trait_selection[d430e1c40be3746a]::traits::coherence::overlapping_impls
22: 0x1125a85ae - <rustc_middle[242d69f972ac9ef0]::traits::specialization_graph::Children as rustc_trait_selection[d430e1c40be3746a]::traits::specialize::specialization_graph::ChildrenExt>::insert
23: 0x1125a9522 - <rustc_middle[242d69f972ac9ef0]::traits::specialization_graph::Graph as rustc_trait_selection[d430e1c40be3746a]::traits::specialize::specialization_graph::GraphExt>::insert
24: 0x112534b50 - rustc_trait_selection[d430e1c40be3746a]::traits::specialize::specialization_graph_provider
25: 0x111d7910a - rustc_query_impl[76c89d261ded9cb6]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[76c89d261ded9cb6]::query_impl::specialization_graph_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle[242d69f972ac9ef0]::query::erase::Erased<[u8; 8usize]>>
26: 0x111add65c - rustc_query_system[72513cd51ef7c6d2]::query::plumbing::try_execute_query::<rustc_query_impl[76c89d261ded9cb6]::DynamicConfig<rustc_query_system[72513cd51ef7c6d2]::query::caches::DefIdCache<rustc_middle[242d69f972ac9ef0]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[76c89d261ded9cb6]::plumbing::QueryCtxt, false>
27: 0x111dc5239 - rustc_query_impl[76c89d261ded9cb6]::query_impl::specialization_graph_of::get_query_non_incr::__rust_end_short_backtrace
28: 0x11082cb28 - rustc_hir_analysis[c556178a1eb8d181]::coherence::coherent_trait
29: 0x111d75b0a - rustc_query_impl[76c89d261ded9cb6]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[76c89d261ded9cb6]::query_impl::coherent_trait::dynamic_query::{closure#2}::{closure#0}, rustc_middle[242d69f972ac9ef0]::query::erase::Erased<[u8; 1usize]>>
30: 0x111ad0275 - rustc_query_system[72513cd51ef7c6d2]::query::plumbing::try_execute_query::<rustc_query_impl[76c89d261ded9cb6]::DynamicConfig<rustc_query_system[72513cd51ef7c6d2]::query::caches::DefIdCache<rustc_middle[242d69f972ac9ef0]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[76c89d261ded9cb6]::plumbing::QueryCtxt, false>
31: 0x111daab5c - rustc_query_impl[76c89d261ded9cb6]::query_impl::coherent_trait::get_query_non_incr::__rust_end_short_backtrace
32: 0x1106a1dbd - rustc_middle[242d69f972ac9ef0]::query::plumbing::query_ensure_error_guaranteed::<rustc_query_system[72513cd51ef7c6d2]::query::caches::DefIdCache<rustc_middle[242d69f972ac9ef0]::query::erase::Erased<[u8; 1usize]>>, ()>
33: 0x11089b9a5 - rustc_hir_analysis[c556178a1eb8d181]::check::wfcheck::check_item
34: 0x1107f5051 - rustc_hir_analysis[c556178a1eb8d181]::check::wfcheck::check_well_formed
35: 0x111d76f9a - rustc_query_impl[76c89d261ded9cb6]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[76c89d261ded9cb6]::query_impl::check_well_formed::dynamic_query::{closure#2}::{closure#0}, rustc_middle[242d69f972ac9ef0]::query::erase::Erased<[u8; 1usize]>>
36: 0x111b8cc6d - rustc_query_system[72513cd51ef7c6d2]::query::plumbing::try_execute_query::<rustc_query_impl[76c89d261ded9cb6]::DynamicConfig<rustc_data_structures[a61c6b2746c3dd3d]::vec_cache::VecCache<rustc_span[4cace8aa4bd9a816]::def_id::LocalDefId, rustc_middle[242d69f972ac9ef0]::query::erase::Erased<[u8; 1usize]>, rustc_query_system[72513cd51ef7c6d2]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[76c89d261ded9cb6]::plumbing::QueryCtxt, false>
37: 0x111dd3b20 - rustc_query_impl[76c89d261ded9cb6]::query_impl::check_well_formed::get_query_non_incr::__rust_end_short_backtrace
38: 0x1106a1ac7 - rustc_middle[242d69f972ac9ef0]::query::plumbing::query_ensure_error_guaranteed::<rustc_data_structures[a61c6b2746c3dd3d]::vec_cache::VecCache<rustc_span[4cace8aa4bd9a816]::def_id::LocalDefId, rustc_middle[242d69f972ac9ef0]::query::erase::Erased<[u8; 1usize]>, rustc_query_system[72513cd51ef7c6d2]::dep_graph::graph::DepNodeIndex>, ()>
39: 0x110805cc1 - rustc_hir_analysis[c556178a1eb8d181]::check::wfcheck::check_mod_type_wf
40: 0x111d76f8a - rustc_query_impl[76c89d261ded9cb6]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[76c89d261ded9cb6]::query_impl::check_mod_type_wf::dynamic_query::{closure#2}::{closure#0}, rustc_middle[242d69f972ac9ef0]::query::erase::Erased<[u8; 1usize]>>
41: 0x111b40d5f - rustc_query_system[72513cd51ef7c6d2]::query::plumbing::try_execute_query::<rustc_query_impl[76c89d261ded9cb6]::DynamicConfig<rustc_query_system[72513cd51ef7c6d2]::query::caches::DefaultCache<rustc_span[4cace8aa4bd9a816]::def_id::LocalModDefId, rustc_middle[242d69f972ac9ef0]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[76c89d261ded9cb6]::plumbing::QueryCtxt, false>
42: 0x111da9230 - rustc_query_impl[76c89d261ded9cb6]::query_impl::check_mod_type_wf::get_query_non_incr::__rust_end_short_backtrace
43: 0x11088d35c - rustc_hir_analysis[c556178a1eb8d181]::check_crate
44: 0x110e3132f - rustc_interface[3d6221707cd02e54]::passes::run_required_analyses
45: 0x110e33f73 - rustc_interface[3d6221707cd02e54]::passes::analysis
46: 0x111d7a3fa - rustc_query_impl[76c89d261ded9cb6]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[76c89d261ded9cb6]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[242d69f972ac9ef0]::query::erase::Erased<[u8; 0usize]>>
47: 0x111ae26af - rustc_query_system[72513cd51ef7c6d2]::query::plumbing::try_execute_query::<rustc_query_impl[76c89d261ded9cb6]::DynamicConfig<rustc_query_system[72513cd51ef7c6d2]::query::caches::SingleCache<rustc_middle[242d69f972ac9ef0]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[76c89d261ded9cb6]::plumbing::QueryCtxt, false>
48: 0x111d86f17 - rustc_query_impl[76c89d261ded9cb6]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
49: 0x1104018b4 - rustc_interface[3d6221707cd02e54]::passes::create_and_enter_global_ctxt::<core[271bb12f5570a4f8]::option::Option<rustc_interface[3d6221707cd02e54]::queries::Linker>, rustc_driver_impl[1cd32ebeda1fc3da]::run_compiler::{closure#0}::{closure#2}>
50: 0x1104179c4 - rustc_interface[3d6221707cd02e54]::interface::run_compiler::<(), rustc_driver_impl[1cd32ebeda1fc3da]::run_compiler::{closure#0}>::{closure#1}
51: 0x110404a6d - std[4c3ceb34d8b64346]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[3d6221707cd02e54]::util::run_in_thread_with_globals<rustc_interface[3d6221707cd02e54]::util::run_in_thread_pool_with_globals<rustc_interface[3d6221707cd02e54]::interface::run_compiler<(), rustc_driver_impl[1cd32ebeda1fc3da]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
52: 0x11041e519 - <<std[4c3ceb34d8b64346]::thread::Builder>::spawn_unchecked_<rustc_interface[3d6221707cd02e54]::util::run_in_thread_with_globals<rustc_interface[3d6221707cd02e54]::util::run_in_thread_pool_with_globals<rustc_interface[3d6221707cd02e54]::interface::run_compiler<(), rustc_driver_impl[1cd32ebeda1fc3da]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[271bb12f5570a4f8]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
53: 0x1127dd09b - std::sys::pal::unix::thread::Thread::new::thread_start::hce402b526165ac0e
54: 0x7ff8146df253 - __pthread_start
rustc version: 1.86.0-nightly (6171d944a 2025-02-10)
platform: x86_64-apple-darwin
query stack during panic:
#0 [specialization_graph_of] building specialization graph of trait `Foobar`
#1 [coherent_trait] coherence checking all impls of trait `Foobar`
#2 [check_well_formed] checking that `<impl at 99357C67F6F090FB46F1AE6969F3170B7A4898BB1869E0ABA3D135CDD13E07A9_9.rs:21:1: 22:35>` is well-formed
#3 [check_mod_type_wf] checking that types are well-formed in top-level module
#4 [analysis] running analysis passes on this crate
end of query stack
Note
Ice location:
rust/compiler/rustc_type_ir/src/relate.rs
Lines 580 to 584 in 6171d94
@rustbot label +F-generic_const_exprs