rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
96.22k stars 12.44k forks source link

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

Open matthiaskrgr opened 1 month ago

matthiaskrgr commented 1 month ago

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(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(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 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(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 - ::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::>::{closure#0} 12: 0x78ac0a3952af - as core::ops::function::Fn>::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 - ::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::> 23: 0x78ac084bee85 - rustc_query_system[ab5481f6c869ba71]::query::plumbing::try_execute_query::>, 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::> 27: 0x78ac084bee57 - rustc_query_system[ab5481f6c869ba71]::query::plumbing::try_execute_query::>, 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::> 31: 0x78ac084bee6e - rustc_query_system[ab5481f6c869ba71]::query::plumbing::try_execute_query::>, 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 - ::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::> 36: 0x78ac08639ef5 - rustc_query_system[ab5481f6c869ba71]::query::plumbing::try_execute_query::>, 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::> 40: 0x78ac08e26778 - rustc_query_system[ab5481f6c869ba71]::query::plumbing::try_execute_query::>, 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::> 45: 0x78ac08e1c2e5 - rustc_query_system[ab5481f6c869ba71]::query::plumbing::try_execute_query::>, 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::, rustc_driver_impl[b3016c550210facb]::run_compiler::{closure#0}>::{closure#1} 48: 0x78ac08cdc649 - std[ee1287dda0decb26]::sys::backtrace::__rust_begin_short_backtrace::, 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 - <::spawn_unchecked_, 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 - as core::ops::function::FnOnce>::call_once::hc6d49d49179bb535 at /rustc/ba1d7f4a083e6402679105115ded645512a7aea8/library/alloc/src/boxed.rs:2064:9 51: 0x78ac0a39f10b - as core::ops::function::FnOnce>::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 - 54: 0x78ac0372a0dc - 55: 0x0 - 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 `::add` #1 [predicates_defined_on] computing predicates of `::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

GrigorenkoPV commented 1 month ago

searched nightlies: from nightly-2023-04-15 to nightly-2024-06-30 regressed nightly: nightly-2024-06-30 searched commit range: https://github.com/rust-lang/rust/compare/e9e6e2e444c30c23a9c878a88fbc3978c2acad95...ba1d7f4a083e6402679105115ded645512a7aea8 regressed commit: https://github.com/rust-lang/rust/commit/ba1d7f4a083e6402679105115ded645512a7aea8 (#120639)