Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Default constant generic members are unconstrained #111419

Closed
Tracked by #106994
splurf opened this issue May 10, 2023 · 1 comment
Closed
Tracked by #106994

Default constant generic members are unconstrained #111419

splurf opened this issue May 10, 2023 · 1 comment
Labels
C-bug Category: This is a bug. F-generic_const_exprs `#![feature(generic_const_exprs)]` I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ requires-incomplete-features This issue requires the use of incomplete features. requires-nightly This issue requires a nightly compiler in some way. S-bug-has-test Status: This bug is tracked inside the repo by a `known-bug` test. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@splurf
Copy link

splurf commented May 10, 2023

When establishing default generic members dependent on the value of another generic, the compiler will hint towards the following:

unconstrained generic constant
try adding a `where` bound using this expression: `where [(); { X + Y }]:`

After trying this the compiler seems to be fine but after running cargo build there is an internal compiler error.

Code

#![allow(incomplete_features)]
#![feature(generic_const_exprs, generic_arg_infer)]

pub trait Example<const X: usize, const Y: usize, const Z: usize = { X + Y }>
where
    [(); X + Y]:,
{}

impl<const X: usize, const Y: usize> Example<X, Y> for Value {}

pub struct Value;

fn main() {}

In the case of this error, the following is the unconstrained generic:

const Z: usize = { X + Y }

If we replace { X + Y } with a static integer, such as 4, then everything works fine. I'm assuming the error is originating from the generic_const_exprs feature because of this.

Meta

rustc --version --verbose:

rustc 1.71.0-nightly (2f6bc5d25 2023-05-09)
binary: rustc
commit-hash: 2f6bc5d259e7ab25ddfdd33de53b892770218918
commit-date: 2023-05-09
host: x86_64-pc-windows-msvc
release: 1.71.0-nightly
LLVM version: 16.0.2

Error output

error: internal compiler error: compiler\rustc_middle\src\ty\subst.rs:933:9: const parameter `Z/#3` (Const { ty: usize, kind: Param(Z/#3) }/3) out of range when substituting substs=[Value, Const { ty: usize, kind: Param(X/#0) }, Const { ty: usize, kind: Param(Y/#1) }]
Backtrace

error: internal compiler error: compiler\rustc_middle\src\ty\subst.rs:933:9: const parameter `Z/#3` (Const { ty: usize, kind: Param(Z/#3) }/3) out of range when substituting substs=[Value, Const { ty: usize, kind: Param(X/#0) }, Const { ty: usize, kind: Param(Y/#1) }]

thread 'rustc' panicked at 'Box<dyn Any>', /rustc/2f6bc5d259e7ab25ddfdd33de53b892770218918\compiler\rustc_errors\src\lib.rs:1650:9
stack backtrace:
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

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.71.0-nightly (2f6bc5d25 2023-05-09) running on x86_64-pc-windows-msvc

note: compiler flags: --crate-type bin -C embed-bitcode=no -C debuginfo=2 -C incremental=[REDACTED]

note: some of the compiler flags provided by cargo are hidden

query stack during panic:
#0 [check_well_formed] checking that `<impl at src\main.rs:9:1: 9:61>` is well-formed
#1 [check_mod_type_wf] checking that types are well-formed in top-level module
#2 [analysis] running analysis passes on this crate
end of query stack
error: could not compile `t1` (bin "t1")

Full Backtrace

error: internal compiler error: compiler\rustc_middle\src\ty\subst.rs:933:9: const parameter `Z/#3` (Const { ty: usize, kind: Param(Z/#3) }/3) out of range when substituting substs=[Value, Const { ty: usize, kind: Param(X/#0) }, Const { ty: usize, kind: Param(Y/#1) }]

thread 'rustc' panicked at 'Box<dyn Any>', /rustc/2f6bc5d259e7ab25ddfdd33de53b892770218918\compiler\rustc_errors\src\lib.rs:1650:9
stack backtrace:
   0:     0x7ff9747b614c - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h6a49e06e6dee2bf9
   1:     0x7ff9747eef7b - core::fmt::write::he8d8f68a61258e76
   2:     0x7ff9747ab819 - <std::io::IoSlice as core::fmt::Debug>::fmt::hc7a877c678f27ace
   3:     0x7ff9747b5efb - std::sys::common::alloc::realloc_fallback::hb0c4c746d16999f4
   4:     0x7ff9747b9729 - std::panicking::default_hook::he9785754479d3c09
   5:     0x7ff9747b93df - std::panicking::default_hook::he9785754479d3c09
   6:     0x7ff943e4e716 - rustc_driver_impl[33202727405cf2b1]::install_ice_hook
   7:     0x7ff9747b9e2b - std::panicking::rust_panic_with_hook::ha9d065be1dad797b
   8:     0x7ff946363773 - <rustc_middle[62881603dcf8d3f1]::ty::fast_reject::DeepRejectCtxt as core[6d1b28d878a231cd]::fmt::Debug>::fmt
   9:     0x7ff9463611b9 - <rustc_middle[62881603dcf8d3f1]::ty::fast_reject::DeepRejectCtxt as core[6d1b28d878a231cd]::fmt::Debug>::fmt
  10:     0x7ff946360f19 - <rustc_middle[62881603dcf8d3f1]::ty::fast_reject::DeepRejectCtxt as core[6d1b28d878a231cd]::fmt::Debug>::fmt
  11:     0x7ff94635a0a0 - <rustc_middle[62881603dcf8d3f1]::ty::fast_reject::DeepRejectCtxt as core[6d1b28d878a231cd]::fmt::Debug>::fmt
  12:     0x7ff946359c5c - <rustc_middle[62881603dcf8d3f1]::ty::fast_reject::DeepRejectCtxt as core[6d1b28d878a231cd]::fmt::Debug>::fmt
  13:     0x7ff946333b6d - rustc_middle[62881603dcf8d3f1]::util::bug::bug_fmt
  14:     0x7ff94633312d - <rustc_middle[62881603dcf8d3f1]::ty::consts::valtree::ValTree>::try_to_raw_bytes
  15:     0x7ff9463330ef - <rustc_middle[62881603dcf8d3f1]::ty::consts::valtree::ValTree>::try_to_raw_bytes
  16:     0x7ff946333a5f - rustc_middle[62881603dcf8d3f1]::util::bug::bug_fmt
  17:     0x7ff94636bbf5 - <rustc_middle[62881603dcf8d3f1]::ty::subst::GenericArg as rustc_middle[62881603dcf8d3f1]::ty::context::Lift>::lift_to_tcx
  18:     0x7ff943d47553 - <rustc_middle[62881603dcf8d3f1]::ty::subst::GenericArg>::expect_ty
  19:     0x7ff943d6ff23 - <rustc_middle[62881603dcf8d3f1]::ty::list::List<rustc_middle[62881603dcf8d3f1]::ty::subst::GenericArg>>::truncate_to
  20:     0x7ff943d4cdc6 - <rustc_middle[62881603dcf8d3f1]::ty::rvalue_scopes::RvalueScopes>::temporary_scope
  21:     0x7ff943d4732c - <rustc_middle[62881603dcf8d3f1]::ty::subst::GenericArg>::expect_ty
  22:     0x7ff943dae356 - <rustc_middle[62881603dcf8d3f1]::ty::context::TyCtxt>::instance_mir
  23:     0x7ff943d041af - <rustc_middle[62881603dcf8d3f1]::ty::query::TyCtxtEnsure>::const_eval_poly
  24:     0x7ff943cfa483 - <rustc_middle[62881603dcf8d3f1]::ty::generics::GenericPredicates>::instantiate
  25:     0x7ff943c2b1eb - rustc_trait_selection[74703593c0cab2a9]::traits::wf::predicate_obligations
  26:     0x7ff943c28d32 - rustc_trait_selection[74703593c0cab2a9]::traits::wf::predicate_obligations
  27:     0x7ff943b5aac8 - <rustc_trait_selection[74703593c0cab2a9]::traits::fulfill::FulfillProcessor as rustc_data_structures[2f16d3680bbdb9f7]::obligation_forest::ObligationProcessor>::process_obligation
  28:     0x7ff943bf4550 - rustc_trait_selection[74703593c0cab2a9]::traits::project::normalize_projection_type
  29:     0x7ff943bfe312 - <rustc_trait_selection[74703593c0cab2a9]::traits::engine::ObligationCtxt>::select_all_or_error
  30:     0x7ff94311d6e2 - <rustc_infer[776602ba86f8fd70]::infer::InferCtxt as rustc_hir_analysis[c8cf2ee9fbb508a6]::astconv::InferCtxtExt>::fresh_item_substs
  31:     0x7ff9420a71e8 - <rustc_query_impl[32ff81daef66415]::queries::exported_symbols as rustc_query_system[3f75387262d59d80]::query::config::QueryConfig<rustc_query_impl[32ff81daef66415]::plumbing::QueryCtxt>>::execute_query
  32:     0x7ff9437ed8ad - <rustc_query_impl[32ff81daef66415]::queries::lookup_deprecation_entry as rustc_query_system[3f75387262d59d80]::query::config::QueryConfig<rustc_query_impl[32ff81daef66415]::plumbing::QueryCtxt>>::execute_query
  33:     0x7ff9437242ae - rustc_query_impl[32ff81daef66415]::query_callbacks
  34:     0x7ff9431063d5 - rustc_hir_analysis[c8cf2ee9fbb508a6]::check::check::check_abi
  35:     0x7ff941de756b - <rustc_hir_analysis[c8cf2ee9fbb508a6]::check::wfcheck::ImplTraitInTraitFinder as rustc_type_ir[25b48e22f8e5c9fa]::visit::TypeVisitor<rustc_middle[62881603dcf8d3f1]::ty::context::TyCtxt>>::visit_ty
  36:     0x7ff9420a71e8 - <rustc_query_impl[32ff81daef66415]::queries::exported_symbols as rustc_query_system[3f75387262d59d80]::query::config::QueryConfig<rustc_query_impl[32ff81daef66415]::plumbing::QueryCtxt>>::execute_query
  37:     0x7ff9420fda9e - <rustc_query_impl[32ff81daef66415]::queries::exported_symbols as rustc_query_system[3f75387262d59d80]::query::config::QueryConfig<rustc_query_impl[32ff81daef66415]::plumbing::QueryCtxt>>::execute_query
  38:     0x7ff94203f548 - rustc_query_impl[32ff81daef66415]::query_system_fns
  39:     0x7ff941dda3a8 - <rustc_hir_analysis[c8cf2ee9fbb508a6]::autoderef::Autoderef>::silence_errors
  40:     0x7ff9430b37e0 - rustc_hir_analysis[c8cf2ee9fbb508a6]::check_crate
  41:     0x7ff94166a018 - rustc_interface[96f19ec40f526bfb]::passes::analysis
  42:     0x7ff9421930ba - <rustc_query_impl[32ff81daef66415]::queries::exported_symbols as rustc_query_system[3f75387262d59d80]::query::config::QueryConfig<rustc_query_impl[32ff81daef66415]::plumbing::QueryCtxt>>::execute_query
  43:     0x7ff9420a7924 - <rustc_query_impl[32ff81daef66415]::queries::exported_symbols as rustc_query_system[3f75387262d59d80]::query::config::QueryConfig<rustc_query_impl[32ff81daef66415]::plumbing::QueryCtxt>>::execute_query
  44:     0x7ff942185e59 - <rustc_query_impl[32ff81daef66415]::queries::exported_symbols as rustc_query_system[3f75387262d59d80]::query::config::QueryConfig<rustc_query_impl[32ff81daef66415]::plumbing::QueryCtxt>>::execute_query
  45:     0x7ff94203bda1 - rustc_query_impl[32ff81daef66415]::query_system_fns
  46:     0x7ff94163c8b9 - <rustc_middle[62881603dcf8d3f1]::ty::SymbolName as core[6d1b28d878a231cd]::fmt::Debug>::fmt
  47:     0x7ff94161a088 - rustc_driver_impl[33202727405cf2b1]::args::arg_expand_all
  48:     0x7ff941638e53 - rustc_driver_impl[33202727405cf2b1]::args::arg_expand_all
  49:     0x7ff94163a2a6 - rustc_driver_impl[33202727405cf2b1]::args::arg_expand_all
  50:     0x7ff9747cd19c - std::sys::windows::thread::Thread::new::h703068e96e3b4903
  51:     0x7ff9c5427604 - BaseThreadInitThunk
  52:     0x7ff9c6c426a1 - RtlUserThreadStart

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.71.0-nightly (2f6bc5d25 2023-05-09) running on x86_64-pc-windows-msvc

note: compiler flags: --crate-type bin -C embed-bitcode=no -C debuginfo=2 -C incremental=[REDACTED]

note: some of the compiler flags provided by cargo are hidden

query stack during panic:
#0 [check_well_formed] checking that `<impl at src\main.rs:9:1: 9:61>` is well-formed
#1 [check_mod_type_wf] checking that types are well-formed in top-level module
#2 [analysis] running analysis passes on this crate
end of query stack
error: could not compile `t1` (bin "t1")

@splurf splurf added C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels May 10, 2023
@Noratrieb Noratrieb added requires-nightly This issue requires a nightly compiler in some way. F-generic_const_exprs `#![feature(generic_const_exprs)]` requires-incomplete-features This issue requires the use of incomplete features. labels May 10, 2023
@BoxyUwU
Copy link
Member

BoxyUwU commented May 10, 2023

dupe of #106994 i think

@BoxyUwU BoxyUwU closed this as completed May 10, 2023
@matthiaskrgr matthiaskrgr added the S-bug-has-test Status: This bug is tracked inside the repo by a `known-bug` test. label Apr 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: This is a bug. F-generic_const_exprs `#![feature(generic_const_exprs)]` I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ requires-incomplete-features This issue requires the use of incomplete features. requires-nightly This issue requires a nightly compiler in some way. S-bug-has-test Status: This bug is tracked inside the repo by a `known-bug` test. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests

4 participants