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

ICE: expected type for .. but found Const(false) when instantiating #127141

Closed
matthiaskrgr opened this issue Jun 30, 2024 · 1 comment
Closed
Labels
C-bug Category: This is a bug. F-const_trait_impl `#![feature(const_trait_impl)]` F-effects `#![feature(effects)]` I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ P-low Low priority T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@matthiaskrgr
Copy link
Member

auto-reduced (treereduce-rust):

#![feature(const_trait_impl, effects)]

trait Add42 {}

impl const Add42 for () {
    fn add<A: ~const Add42>(self) -> Foo {
        Foo
    }
}

original:

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

struct Foo<const N: usize>;

impl<const N: usize> Foo<N> {
    fn add<A: ~const Add42>(self) -> Foo<{ A::add(N) }> {
        //~^ ERROR `~const` is not allowed here
        //~| ERROR mismatched types
        Foo
    }
}

#[const_trait]
trait Add42 {
    fn add(a: usize) -> usize;
}

impl const Add42 for () {
    fn add<A: ~const Add42>(self) -> Foo<{ A::add(N) }> {
        //~^ ERROR `~const` is not allowed here
        //~| ERROR mismatched types
        Foo
    }
}

fn bar<A: const Add42, const N: usize>(_: Foo<N>) -> Foo<{ A::add(N) }> {
    //~^ ERROR `~const` is not allowed here
    //~| ERROR mismatched types
    Foo
}

fn main() {
    let foo = Foo::<0>;
    let foo = bar::<(), _>(foo);
    let _foo = bar::<(), _>(foo);
}

Version information

rustc 1.81.0-nightly (ba1d7f4a0 2024-06-29)
binary: rustc
commit-hash: ba1d7f4a083e6402679105115ded645512a7aea8
commit-date: 2024-06-29
host: x86_64-unknown-linux-gnu
release: 1.81.0-nightly
LLVM version: 18.1.7

Command:
/home/matthias/.rustup/toolchains/master/bin/rustc

Program output

error[E0407]: method `add` is not a member of trait `Add42`
 --> /tmp/icemaker_global_tempdir.xB9oQHak7XZe/rustc_testrunner_tmpdir_reporting.Lp6W2hBmunyv/mvce.rs:6:5
  |
6 | /     fn add<A: ~const Add42>(self) -> Foo {
7 | |         Foo
8 | |     }
  | |_____^ not a member of trait `Add42`

error[E0412]: cannot find type `Foo` in this scope
 --> /tmp/icemaker_global_tempdir.xB9oQHak7XZe/rustc_testrunner_tmpdir_reporting.Lp6W2hBmunyv/mvce.rs:6:38
  |
6 |     fn add<A: ~const Add42>(self) -> Foo {
  |                                      ^^^ not found in this scope

error[E0425]: cannot find value `Foo` in this scope
 --> /tmp/icemaker_global_tempdir.xB9oQHak7XZe/rustc_testrunner_tmpdir_reporting.Lp6W2hBmunyv/mvce.rs:7:9
  |
7 |         Foo
  |         ^^^ not found in this scope

warning: the feature `effects` is incomplete and may not be safe to use and/or cause compiler crashes
 --> /tmp/icemaker_global_tempdir.xB9oQHak7XZe/rustc_testrunner_tmpdir_reporting.Lp6W2hBmunyv/mvce.rs:1:30
  |
1 | #![feature(const_trait_impl, effects)]
  |                              ^^^^^^^
  |
  = note: see issue #102090 <https://github.com/rust-lang/rust/issues/102090> for more information
  = note: `#[warn(incomplete_features)]` on by default

error[E0601]: `main` function not found in crate `mvce`
 --> /tmp/icemaker_global_tempdir.xB9oQHak7XZe/rustc_testrunner_tmpdir_reporting.Lp6W2hBmunyv/mvce.rs:9:2
  |
9 | }
  |  ^ consider adding a `main` function to `/tmp/icemaker_global_tempdir.xB9oQHak7XZe/rustc_testrunner_tmpdir_reporting.Lp6W2hBmunyv/mvce.rs`

error: const `impl` for trait `Add42` which is not marked with `#[const_trait]`
 --> /tmp/icemaker_global_tempdir.xB9oQHak7XZe/rustc_testrunner_tmpdir_reporting.Lp6W2hBmunyv/mvce.rs:5:12
  |
3 | trait Add42 {}
  | - help: mark `Add42` as const: `#[const_trait]`
4 |
5 | impl const Add42 for () {
  |            ^^^^^
  |
  = note: marking a trait with `#[const_trait]` ensures all default method bodies are `const`
  = note: adding a non-const method body in the future would be a breaking change

error: `~const` can only be applied to `#[const_trait]` traits
 --> /tmp/icemaker_global_tempdir.xB9oQHak7XZe/rustc_testrunner_tmpdir_reporting.Lp6W2hBmunyv/mvce.rs:6:22
  |
6 |     fn add<A: ~const Add42>(self) -> Foo {
  |                      ^^^^^

thread 'rustc' panicked at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/compiler/rustc_middle/src/ty/util.rs:909:22:
ConstContext::Maybe must have host effect param
stack backtrace:
   0:     0x78ac0a3922b5 - std::backtrace_rs::backtrace::libunwind::trace::h9fec972da723f824
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/std/src/../../backtrace/src/backtrace/libunwind.rs:116:5
   1:     0x78ac0a3922b5 - std::backtrace_rs::backtrace::trace_unsynchronized::h6750dc8e20aabcad
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x78ac0a3922b5 - std::sys::backtrace::_print_fmt::h112c52e5e2edb557
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/std/src/sys/backtrace.rs:68:5
   3:     0x78ac0a3922b5 - <std::sys::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h4713d06d34163f46
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/std/src/sys/backtrace.rs:44:22
   4:     0x78ac0a3e1d9b - core::fmt::rt::Argument::fmt::h919dfde74ebabb2a
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/core/src/fmt/rt.rs:173:76
   5:     0x78ac0a3e1d9b - core::fmt::write::h63ad278710fcf618
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/core/src/fmt/mod.rs:1174:21
   6:     0x78ac0a386e9f - std::io::Write::write_fmt::h48f75cc65a268f9a
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/std/src/io/mod.rs:1835:15
   7:     0x78ac0a39208e - std::sys::backtrace::_print::ha47bd77a3336440c
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/std/src/sys/backtrace.rs:47:5
   8:     0x78ac0a39208e - std::sys::backtrace::print::hd71c23c2433456bf
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/std/src/sys/backtrace.rs:34:9
   9:     0x78ac0a3949d9 - std::panicking::default_hook::{{closure}}::ha7861419c6fed626
  10:     0x78ac0a39477c - std::panicking::default_hook::hdb522e40b65d9458
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/std/src/panicking.rs:292:9
  11:     0x78ac06bb18a0 - std[ee1287dda0decb26]::panicking::update_hook::<alloc[ebf157a0a0183114]::boxed::Box<rustc_driver_impl[b3016c550210facb]::install_ice_hook::{closure#0}>>::{closure#0}
  12:     0x78ac0a3952af - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h8a54893ded3fcd8c
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/alloc/src/boxed.rs:2078:9
  13:     0x78ac0a3952af - std::panicking::rust_panic_with_hook::h79c7320e6dd14ff0
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/std/src/panicking.rs:804:13
  14:     0x78ac0a394ed7 - std::panicking::begin_panic_handler::{{closure}}::h6bf6d623eeb925ff
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/std/src/panicking.rs:670:13
  15:     0x78ac0a392779 - std::sys::backtrace::__rust_end_short_backtrace::hae9fda2e5a3f99dc
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/std/src/sys/backtrace.rs:171:18
  16:     0x78ac0a394bb4 - rust_begin_unwind
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/std/src/panicking.rs:661:5
  17:     0x78ac0a3de353 - core::panicking::panic_fmt::h1a6b0ab626f31f34
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/core/src/panicking.rs:74:14
  18:     0x78ac0a3de18b - core::panicking::panic_display::h5ac03becd5683664
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/core/src/panicking.rs:264:5
  19:     0x78ac0a3de18b - core::option::expect_failed::h9ec31866d38db7c4
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/core/src/option.rs:2023:5
  20:     0x78ac084cf6ae - <dyn rustc_hir_analysis[190a10ac9c7209da]::hir_ty_lowering::HirTyLowerer>::lower_poly_trait_ref
  21:     0x78ac084c680a - rustc_hir_analysis[190a10ac9c7209da]::collect::predicates_of::gather_explicit_predicates_of
  22:     0x78ac084c43dc - rustc_query_impl[e193fcc3be99e64a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e193fcc3be99e64a]::query_impl::explicit_predicates_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle[375bbde5f17fb8ea]::query::erase::Erased<[u8; 32usize]>>
  23:     0x78ac084bee85 - rustc_query_system[ab5481f6c869ba71]::query::plumbing::try_execute_query::<rustc_query_impl[e193fcc3be99e64a]::DynamicConfig<rustc_query_system[ab5481f6c869ba71]::query::caches::DefIdCache<rustc_middle[375bbde5f17fb8ea]::query::erase::Erased<[u8; 32usize]>>, false, false, false>, rustc_query_impl[e193fcc3be99e64a]::plumbing::QueryCtxt, false>
  24:     0x78ac084beb23 - rustc_query_impl[e193fcc3be99e64a]::query_impl::explicit_predicates_of::get_query_non_incr::__rust_end_short_backtrace
  25:     0x78ac084bfb1e - rustc_hir_analysis[190a10ac9c7209da]::collect::predicates_defined_on
  26:     0x78ac084bfa2d - rustc_query_impl[e193fcc3be99e64a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e193fcc3be99e64a]::query_impl::predicates_defined_on::dynamic_query::{closure#2}::{closure#0}, rustc_middle[375bbde5f17fb8ea]::query::erase::Erased<[u8; 32usize]>>
  27:     0x78ac084bee57 - rustc_query_system[ab5481f6c869ba71]::query::plumbing::try_execute_query::<rustc_query_impl[e193fcc3be99e64a]::DynamicConfig<rustc_query_system[ab5481f6c869ba71]::query::caches::DefIdCache<rustc_middle[375bbde5f17fb8ea]::query::erase::Erased<[u8; 32usize]>>, false, false, false>, rustc_query_impl[e193fcc3be99e64a]::plumbing::QueryCtxt, false>
  28:     0x78ac084be927 - rustc_query_impl[e193fcc3be99e64a]::query_impl::predicates_defined_on::get_query_non_incr::__rust_end_short_backtrace
  29:     0x78ac084bddd5 - rustc_hir_analysis[190a10ac9c7209da]::collect::predicates_of::predicates_of
  30:     0x78ac084bdcd1 - rustc_query_impl[e193fcc3be99e64a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e193fcc3be99e64a]::query_impl::predicates_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle[375bbde5f17fb8ea]::query::erase::Erased<[u8; 32usize]>>
  31:     0x78ac084bee6e - rustc_query_system[ab5481f6c869ba71]::query::plumbing::try_execute_query::<rustc_query_impl[e193fcc3be99e64a]::DynamicConfig<rustc_query_system[ab5481f6c869ba71]::query::caches::DefIdCache<rustc_middle[375bbde5f17fb8ea]::query::erase::Erased<[u8; 32usize]>>, false, false, false>, rustc_query_impl[e193fcc3be99e64a]::plumbing::QueryCtxt, false>
  32:     0x78ac084bea23 - rustc_query_impl[e193fcc3be99e64a]::query_impl::predicates_of::get_query_non_incr::__rust_end_short_backtrace
  33:     0x78ac084ac05c - <rustc_hir_analysis[190a10ac9c7209da]::collect::CollectItemTypesVisitor as rustc_hir[9cb815a008d04811]::intravisit::Visitor>::visit_impl_item
  34:     0x78ac05a3654b - rustc_hir_analysis[190a10ac9c7209da]::check::wfcheck::check_well_formed
  35:     0x78ac08639c69 - rustc_query_impl[e193fcc3be99e64a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e193fcc3be99e64a]::query_impl::check_well_formed::dynamic_query::{closure#2}::{closure#0}, rustc_middle[375bbde5f17fb8ea]::query::erase::Erased<[u8; 1usize]>>
  36:     0x78ac08639ef5 - rustc_query_system[ab5481f6c869ba71]::query::plumbing::try_execute_query::<rustc_query_impl[e193fcc3be99e64a]::DynamicConfig<rustc_query_system[ab5481f6c869ba71]::query::caches::VecCache<rustc_hir[9cb815a008d04811]::hir_id::OwnerId, rustc_middle[375bbde5f17fb8ea]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[e193fcc3be99e64a]::plumbing::QueryCtxt, false>
  37:     0x78ac08639c46 - rustc_query_impl[e193fcc3be99e64a]::query_impl::check_well_formed::get_query_non_incr::__rust_end_short_backtrace
  38:     0x78ac0863aab4 - rustc_hir_analysis[190a10ac9c7209da]::check::wfcheck::check_mod_type_wf
  39:     0x78ac0863a759 - rustc_query_impl[e193fcc3be99e64a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e193fcc3be99e64a]::query_impl::check_mod_type_wf::dynamic_query::{closure#2}::{closure#0}, rustc_middle[375bbde5f17fb8ea]::query::erase::Erased<[u8; 1usize]>>
  40:     0x78ac08e26778 - rustc_query_system[ab5481f6c869ba71]::query::plumbing::try_execute_query::<rustc_query_impl[e193fcc3be99e64a]::DynamicConfig<rustc_query_system[ab5481f6c869ba71]::query::caches::DefaultCache<rustc_span[a32535cd2922901f]::def_id::LocalModDefId, rustc_middle[375bbde5f17fb8ea]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[e193fcc3be99e64a]::plumbing::QueryCtxt, false>
  41:     0x78ac08e26527 - rustc_query_impl[e193fcc3be99e64a]::query_impl::check_mod_type_wf::get_query_non_incr::__rust_end_short_backtrace
  42:     0x78ac08242523 - rustc_hir_analysis[190a10ac9c7209da]::check_crate
  43:     0x78ac08745455 - rustc_interface[ab25a569cec44e98]::passes::analysis
  44:     0x78ac08745015 - rustc_query_impl[e193fcc3be99e64a]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e193fcc3be99e64a]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[375bbde5f17fb8ea]::query::erase::Erased<[u8; 1usize]>>
  45:     0x78ac08e1c2e5 - rustc_query_system[ab5481f6c869ba71]::query::plumbing::try_execute_query::<rustc_query_impl[e193fcc3be99e64a]::DynamicConfig<rustc_query_system[ab5481f6c869ba71]::query::caches::SingleCache<rustc_middle[375bbde5f17fb8ea]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[e193fcc3be99e64a]::plumbing::QueryCtxt, false>
  46:     0x78ac08e1c04f - rustc_query_impl[e193fcc3be99e64a]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  47:     0x78ac08d5037f - rustc_interface[ab25a569cec44e98]::interface::run_compiler::<core[a458eee17fffdec1]::result::Result<(), rustc_span[a32535cd2922901f]::ErrorGuaranteed>, rustc_driver_impl[b3016c550210facb]::run_compiler::{closure#0}>::{closure#1}
  48:     0x78ac08cdc649 - std[ee1287dda0decb26]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[ab25a569cec44e98]::util::run_in_thread_with_globals<rustc_interface[ab25a569cec44e98]::util::run_in_thread_pool_with_globals<rustc_interface[ab25a569cec44e98]::interface::run_compiler<core[a458eee17fffdec1]::result::Result<(), rustc_span[a32535cd2922901f]::ErrorGuaranteed>, rustc_driver_impl[b3016c550210facb]::run_compiler::{closure#0}>::{closure#1}, core[a458eee17fffdec1]::result::Result<(), rustc_span[a32535cd2922901f]::ErrorGuaranteed>>::{closure#0}, core[a458eee17fffdec1]::result::Result<(), rustc_span[a32535cd2922901f]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[a458eee17fffdec1]::result::Result<(), rustc_span[a32535cd2922901f]::ErrorGuaranteed>>
  49:     0x78ac08cdc3fa - <<std[ee1287dda0decb26]::thread::Builder>::spawn_unchecked_<rustc_interface[ab25a569cec44e98]::util::run_in_thread_with_globals<rustc_interface[ab25a569cec44e98]::util::run_in_thread_pool_with_globals<rustc_interface[ab25a569cec44e98]::interface::run_compiler<core[a458eee17fffdec1]::result::Result<(), rustc_span[a32535cd2922901f]::ErrorGuaranteed>, rustc_driver_impl[b3016c550210facb]::run_compiler::{closure#0}>::{closure#1}, core[a458eee17fffdec1]::result::Result<(), rustc_span[a32535cd2922901f]::ErrorGuaranteed>>::{closure#0}, core[a458eee17fffdec1]::result::Result<(), rustc_span[a32535cd2922901f]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[a458eee17fffdec1]::result::Result<(), rustc_span[a32535cd2922901f]::ErrorGuaranteed>>::{closure#2} as core[a458eee17fffdec1]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  50:     0x78ac0a39f10b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hc6d49d49179bb535
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/alloc/src/boxed.rs:2064:9
  51:     0x78ac0a39f10b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h7270f16d3abba4aa
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/alloc/src/boxed.rs:2064:9
  52:     0x78ac0a39f10b - std::sys::pal::unix::thread::Thread::new::thread_start::h3929f25d671aa35f
                               at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/std/src/sys/pal/unix/thread.rs:108:17
  53:     0x78ac036a6ded - <unknown>
  54:     0x78ac0372a0dc - <unknown>
  55:                0x0 - <unknown>

error: 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: please make sure that you have updated to the latest nightly

note: rustc 1.81.0-nightly (ba1d7f4a0 2024-06-29) running on x86_64-unknown-linux-gnu

query stack during panic:
#0 [explicit_predicates_of] computing explicit predicates of `<impl at /tmp/icemaker_global_tempdir.xB9oQHak7XZe/rustc_testrunner_tmpdir_reporting.Lp6W2hBmunyv/mvce.rs:5:1: 5:24>::add`
#1 [predicates_defined_on] computing predicates of `<impl at /tmp/icemaker_global_tempdir.xB9oQHak7XZe/rustc_testrunner_tmpdir_reporting.Lp6W2hBmunyv/mvce.rs:5:1: 5:24>::add`
end of query stack
error: aborting due to 6 previous errors; 1 warning emitted

Some errors have detailed explanations: E0407, E0412, E0425, E0601.
For more information about an error, try `rustc --explain E0407`.

@rustbot label +F-const_trait_impl +F-effects +F-generic_arg_infer +F-generic_const_exprs

@matthiaskrgr matthiaskrgr added 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. C-bug Category: This is a bug. labels Jun 30, 2024
@rustbot rustbot added needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. F-const_trait_impl `#![feature(const_trait_impl)]` F-effects `#![feature(effects)]` F-generic_arg_infer Using `_` as a const argument: #![feature(generic_arg_infer)]` F-generic_const_exprs `#![feature(generic_const_exprs)]` labels Jun 30, 2024
@oli-obk oli-obk added P-low Low priority and removed F-generic_const_exprs `#![feature(generic_const_exprs)]` F-generic_arg_infer Using `_` as a const argument: #![feature(generic_arg_infer)]` needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. labels Jun 30, 2024
@GrigorenkoPV
Copy link
Contributor

searched nightlies: from nightly-2023-04-15 to nightly-2024-06-30
regressed nightly: nightly-2024-06-30
searched commit range: e9e6e2e...ba1d7f4
regressed commit: ba1d7f4 (#120639)

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-const_trait_impl `#![feature(const_trait_impl)]` F-effects `#![feature(effects)]` I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ P-low Low priority 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