Skip to content

ICE:var types encountered in structurally_relate_consts #136859

Open
@Naserume

Description

@Naserume

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:

let is_match = match (a.kind(), b.kind()) {
(ty::ConstKind::Infer(_), _) | (_, ty::ConstKind::Infer(_)) => {
// The caller should handle these cases!
panic!("var types encountered in structurally_relate_consts: {:?} {:?}", a, b)
}

@rustbot label +F-generic_const_exprs

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.F-generic_const_exprs`#![feature(generic_const_exprs)]`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.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions