rust-lang/rust

ICE: `Unexpected node Synthetic`

matthiaskrgr opened this issue · 2 comments

auto-reduced (treereduce-rust):

trait Trait<const module_path: Trait = bar> {
    async fn handle<F>(slf: &F) {}
}

original:

trait Trait<const module_path: Trait = bar> {
    async fn handle<F>(slf: &F)
where
    F: Fn(&()) -> &mut (dyn Future<Output = ()> + Unpin),
{
    (slf)(&()).await;
}
}

fn main() {}

Version information

rustc 1.79.0-nightly (b3df0d7e5 2024-03-22)
binary: rustc
commit-hash: b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87
commit-date: 2024-03-22
host: x86_64-unknown-linux-gnu
release: 1.79.0-nightly
LLVM version: 18.1.2

Command:
/home/matthias/.rustup/toolchains/master/bin/rustc -Zunstable-options --edition=2024

Program output

error[E0425]: cannot find value `bar` in this scope
 --> /tmp/icemaker_global_tempdir.pLv5S1PJhcgC/rustc_testrunner_tmpdir_reporting.vqm2wcW7QHJ8/mvce.rs:1:40
  |
1 | trait Trait<const module_path: Trait = bar> {
  |                                        ^^^ not found in this scope

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

error[E0391]: cycle detected when computing type of `Trait::module_path`
 --> /tmp/icemaker_global_tempdir.pLv5S1PJhcgC/rustc_testrunner_tmpdir_reporting.vqm2wcW7QHJ8/mvce.rs:1:32
  |
1 | trait Trait<const module_path: Trait = bar> {
  |                                ^^^^^
  |
  = note: ...which immediately requires computing type of `Trait::module_path` again
note: cycle used when computing explicit predicates of trait `Trait`
 --> /tmp/icemaker_global_tempdir.pLv5S1PJhcgC/rustc_testrunner_tmpdir_reporting.vqm2wcW7QHJ8/mvce.rs:1:1
  |
1 | trait Trait<const module_path: Trait = bar> {
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  = note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information

error[E0391]: cycle detected when computing type of `Trait::module_path`
 --> /tmp/icemaker_global_tempdir.pLv5S1PJhcgC/rustc_testrunner_tmpdir_reporting.vqm2wcW7QHJ8/mvce.rs:1:13
  |
1 | trait Trait<const module_path: Trait = bar> {
  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: ...which immediately requires computing type of `Trait::module_path` again
note: cycle used when computing explicit predicates of trait `Trait`
 --> /tmp/icemaker_global_tempdir.pLv5S1PJhcgC/rustc_testrunner_tmpdir_reporting.vqm2wcW7QHJ8/mvce.rs:1:1
  |
1 | trait Trait<const module_path: Trait = bar> {
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  = note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information

error[E0038]: the trait `Trait` cannot be made into an object
 --> /tmp/icemaker_global_tempdir.pLv5S1PJhcgC/rustc_testrunner_tmpdir_reporting.vqm2wcW7QHJ8/mvce.rs:1:32
  |
1 | trait Trait<const module_path: Trait = bar> {
  |                                ^^^^^ `Trait` cannot be made into an object
  |
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
 --> /tmp/icemaker_global_tempdir.pLv5S1PJhcgC/rustc_testrunner_tmpdir_reporting.vqm2wcW7QHJ8/mvce.rs:2:14
  |
1 | trait Trait<const module_path: Trait = bar> {
  |       ----- this trait cannot be made into an object...
2 |     async fn handle<F>(slf: &F) {}
  |              ^^^^^^ ...because associated function `handle` has no `self` parameter
help: consider turning `handle` into a method by giving it a `&self` argument
  |
2 |     async fn handle<F>(&self, slf: &F) {}
  |                        ++++++
help: alternatively, consider constraining `handle` so it does not apply to trait objects
  |
2 |     async fn handle<F>(slf: &F) where Self: Sized {}
  |                                 +++++++++++++++++

error[E0038]: the trait `Trait` cannot be made into an object
 --> /tmp/icemaker_global_tempdir.pLv5S1PJhcgC/rustc_testrunner_tmpdir_reporting.vqm2wcW7QHJ8/mvce.rs:1:13
  |
1 | trait Trait<const module_path: Trait = bar> {
  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Trait` cannot be made into an object
  |
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
 --> /tmp/icemaker_global_tempdir.pLv5S1PJhcgC/rustc_testrunner_tmpdir_reporting.vqm2wcW7QHJ8/mvce.rs:2:14
  |
1 | trait Trait<const module_path: Trait = bar> {
  |       ----- this trait cannot be made into an object...
2 |     async fn handle<F>(slf: &F) {}
  |              ^^^^^^ ...because associated function `handle` has no `self` parameter
help: consider turning `handle` into a method by giving it a `&self` argument
  |
2 |     async fn handle<F>(&self, slf: &F) {}
  |                        ++++++
help: alternatively, consider constraining `handle` so it does not apply to trait objects
  |
2 |     async fn handle<F>(slf: &F) where Self: Sized {}
  |                                 +++++++++++++++++

error: `(dyn Trait<{const error}> + 'static)` is forbidden as the type of a const generic parameter
 --> /tmp/icemaker_global_tempdir.pLv5S1PJhcgC/rustc_testrunner_tmpdir_reporting.vqm2wcW7QHJ8/mvce.rs:1:32
  |
1 | trait Trait<const module_path: Trait = bar> {
  |                                ^^^^^
  |
  = note: the only supported types are integers, `bool` and `char`

error: internal compiler error: compiler/rustc_hir_analysis/src/hir_wf_check.rs:176:25: Unexpected node Synthetic

thread 'rustc' panicked at compiler/rustc_hir_analysis/src/hir_wf_check.rs:176:25:
Box<dyn Any>
stack backtrace:
   0:     0x7364225c2fa5 - std::backtrace_rs::backtrace::libunwind::trace::h4515e3e00f57996f
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5
   1:     0x7364225c2fa5 - std::backtrace_rs::backtrace::trace_unsynchronized::h1e64ac1112175e4e
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7364225c2fa5 - std::sys_common::backtrace::_print_fmt::h182160b5ad873150
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/std/src/sys_common/backtrace.rs:68:5
   3:     0x7364225c2fa5 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h432843f19f8b2b6d
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x736422613feb - core::fmt::rt::Argument::fmt::hb59bbd21accf1885
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/core/src/fmt/rt.rs:142:9
   5:     0x736422613feb - core::fmt::write::haf243cf4605e411d
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/core/src/fmt/mod.rs:1153:17
   6:     0x7364225b7d3f - std::io::Write::write_fmt::hd8c8c68b4f5b8f11
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/std/src/io/mod.rs:1843:15
   7:     0x7364225c2d7e - std::sys_common::backtrace::_print::h0ec933d6103e5515
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x7364225c2d7e - std::sys_common::backtrace::print::h55136fa64edb86e6
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x7364225c59f9 - std::panicking::default_hook::{{closure}}::h28cbeefc01b40f52
  10:     0x7364225c5763 - std::panicking::default_hook::h15e904210c67a3ca
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/std/src/panicking.rs:292:9
  11:     0x73641edcb6bf - std[48784e9e46568672]::panicking::update_hook::<alloc[590c7545ac68a568]::boxed::Box<rustc_driver_impl[9e9e6466696ec967]::install_ice_hook::{closure#0}>>::{closure#0}
  12:     0x7364225c6150 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::had664932fcaf7f86
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/alloc/src/boxed.rs:2029:9
  13:     0x7364225c6150 - std::panicking::rust_panic_with_hook::h9f23cc8a1f418825
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/std/src/panicking.rs:783:13
  14:     0x73641edfbaa4 - std[48784e9e46568672]::panicking::begin_panic::<rustc_errors[85c3c7ac8d959a53]::ExplicitBug>::{closure#0}
  15:     0x73641edf86f6 - std[48784e9e46568672]::sys_common::backtrace::__rust_end_short_backtrace::<std[48784e9e46568672]::panicking::begin_panic<rustc_errors[85c3c7ac8d959a53]::ExplicitBug>::{closure#0}, !>
  16:     0x73641edf3c06 - std[48784e9e46568672]::panicking::begin_panic::<rustc_errors[85c3c7ac8d959a53]::ExplicitBug>
  17:     0x73641ee04f31 - <rustc_errors[85c3c7ac8d959a53]::diagnostic::BugAbort as rustc_errors[85c3c7ac8d959a53]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
  18:     0x73641f29754c - rustc_middle[cfd7f582085b2efd]::util::bug::opt_span_bug_fmt::<rustc_span[9e6cb2d6f72e9bb4]::span_encoding::Span>::{closure#0}
  19:     0x73641f27abca - rustc_middle[cfd7f582085b2efd]::ty::context::tls::with_opt::<rustc_middle[cfd7f582085b2efd]::util::bug::opt_span_bug_fmt<rustc_span[9e6cb2d6f72e9bb4]::span_encoding::Span>::{closure#0}, !>::{closure#0}
  20:     0x73641f27aa4b - rustc_middle[cfd7f582085b2efd]::ty::context::tls::with_context_opt::<rustc_middle[cfd7f582085b2efd]::ty::context::tls::with_opt<rustc_middle[cfd7f582085b2efd]::util::bug::opt_span_bug_fmt<rustc_span[9e6cb2d6f72e9bb4]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
  21:     0x73641ce50b50 - rustc_middle[cfd7f582085b2efd]::util::bug::bug_fmt
  22:     0x73641ef048aa - rustc_hir_analysis[595b5ec1edcfd0c3]::hir_wf_check::diagnostic_hir_wf_check
  23:     0x73641f60bd64 - rustc_query_impl[82a63e1d7cdec9a7]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[82a63e1d7cdec9a7]::query_impl::diagnostic_hir_wf_check::dynamic_query::{closure#2}::{closure#0}, rustc_middle[cfd7f582085b2efd]::query::erase::Erased<[u8; 8usize]>>
  24:     0x73641f5f02cb - <rustc_query_impl[82a63e1d7cdec9a7]::query_impl::diagnostic_hir_wf_check::dynamic_query::{closure#2} as core[b4a1350c838fc0f9]::ops::function::FnOnce<(rustc_middle[cfd7f582085b2efd]::ty::context::TyCtxt, (rustc_middle[cfd7f582085b2efd]::ty::predicate::Predicate, rustc_middle[cfd7f582085b2efd]::traits::WellFormedLoc))>>::call_once
  25:     0x73641f571f4b - rustc_query_system[ee3912bf2a9f33a7]::query::plumbing::try_execute_query::<rustc_query_impl[82a63e1d7cdec9a7]::DynamicConfig<rustc_query_system[ee3912bf2a9f33a7]::query::caches::DefaultCache<(rustc_middle[cfd7f582085b2efd]::ty::predicate::Predicate, rustc_middle[cfd7f582085b2efd]::traits::WellFormedLoc), rustc_middle[cfd7f582085b2efd]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[82a63e1d7cdec9a7]::plumbing::QueryCtxt, false>
  26:     0x73641f636410 - rustc_query_impl[82a63e1d7cdec9a7]::query_impl::diagnostic_hir_wf_check::get_query_non_incr::__rust_end_short_backtrace
  27:     0x73641f8fe7ae - <rustc_infer[be9aceac34789818]::infer::error_reporting::TypeErrCtxt as rustc_trait_selection[dc9d16cead07ba55]::traits::error_reporting::type_err_ctxt_ext::TypeErrCtxtExt>::report_selection_error
  28:     0x73641f912571 - <rustc_infer[be9aceac34789818]::infer::error_reporting::TypeErrCtxt as rustc_trait_selection[dc9d16cead07ba55]::traits::error_reporting::type_err_ctxt_ext::InferCtxtPrivExt>::report_fulfillment_error
  29:     0x73641f8fbd6d - <rustc_infer[be9aceac34789818]::infer::error_reporting::TypeErrCtxt as rustc_trait_selection[dc9d16cead07ba55]::traits::error_reporting::type_err_ctxt_ext::TypeErrCtxtExt>::report_fulfillment_errors
  30:     0x736420849cab - rustc_hir_analysis[595b5ec1edcfd0c3]::check::wfcheck::check_associated_item
  31:     0x73642085b1d4 - rustc_hir_analysis[595b5ec1edcfd0c3]::check::wfcheck::check_well_formed
  32:     0x736420857b07 - rustc_query_impl[82a63e1d7cdec9a7]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[82a63e1d7cdec9a7]::query_impl::check_well_formed::dynamic_query::{closure#2}::{closure#0}, rustc_middle[cfd7f582085b2efd]::query::erase::Erased<[u8; 1usize]>>
  33:     0x736420857280 - rustc_query_system[ee3912bf2a9f33a7]::query::plumbing::try_execute_query::<rustc_query_impl[82a63e1d7cdec9a7]::DynamicConfig<rustc_query_system[ee3912bf2a9f33a7]::query::caches::VecCache<rustc_hir[a67f1a97fc26ff83]::hir_id::OwnerId, rustc_middle[cfd7f582085b2efd]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[82a63e1d7cdec9a7]::plumbing::QueryCtxt, false>
  34:     0x736420856fff - rustc_query_impl[82a63e1d7cdec9a7]::query_impl::check_well_formed::get_query_non_incr::__rust_end_short_backtrace
  35:     0x736420856f50 - <rustc_middle[cfd7f582085b2efd]::hir::ModuleItems>::par_trait_items::<rustc_hir_analysis[595b5ec1edcfd0c3]::check::wfcheck::check_mod_type_wf::{closure#2}>::{closure#0}
  36:     0x73642085521e - rustc_hir_analysis[595b5ec1edcfd0c3]::check::wfcheck::check_mod_type_wf
  37:     0x736420854d61 - rustc_query_impl[82a63e1d7cdec9a7]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[82a63e1d7cdec9a7]::query_impl::check_mod_type_wf::dynamic_query::{closure#2}::{closure#0}, rustc_middle[cfd7f582085b2efd]::query::erase::Erased<[u8; 1usize]>>
  38:     0x736420cc2930 - rustc_query_system[ee3912bf2a9f33a7]::query::plumbing::try_execute_query::<rustc_query_impl[82a63e1d7cdec9a7]::DynamicConfig<rustc_query_system[ee3912bf2a9f33a7]::query::caches::DefaultCache<rustc_span[9e6cb2d6f72e9bb4]::def_id::LocalModDefId, rustc_middle[cfd7f582085b2efd]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[82a63e1d7cdec9a7]::plumbing::QueryCtxt, false>
  39:     0x736420cc26db - rustc_query_impl[82a63e1d7cdec9a7]::query_impl::check_mod_type_wf::get_query_non_incr::__rust_end_short_backtrace
  40:     0x7364203f907b - rustc_hir_analysis[595b5ec1edcfd0c3]::check_crate
  41:     0x7364206a02ea - rustc_interface[7ddcde71cf02e108]::passes::analysis
  42:     0x73642069fe51 - rustc_query_impl[82a63e1d7cdec9a7]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[82a63e1d7cdec9a7]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[cfd7f582085b2efd]::query::erase::Erased<[u8; 1usize]>>
  43:     0x736420feb4a5 - rustc_query_system[ee3912bf2a9f33a7]::query::plumbing::try_execute_query::<rustc_query_impl[82a63e1d7cdec9a7]::DynamicConfig<rustc_query_system[ee3912bf2a9f33a7]::query::caches::SingleCache<rustc_middle[cfd7f582085b2efd]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[82a63e1d7cdec9a7]::plumbing::QueryCtxt, false>
  44:     0x736420feb209 - rustc_query_impl[82a63e1d7cdec9a7]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  45:     0x736420e870d9 - rustc_interface[7ddcde71cf02e108]::interface::run_compiler::<core[b4a1350c838fc0f9]::result::Result<(), rustc_span[9e6cb2d6f72e9bb4]::ErrorGuaranteed>, rustc_driver_impl[9e9e6466696ec967]::run_compiler::{closure#0}>::{closure#0}
  46:     0x736420f52399 - std[48784e9e46568672]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[7ddcde71cf02e108]::util::run_in_thread_with_globals<rustc_interface[7ddcde71cf02e108]::util::run_in_thread_pool_with_globals<rustc_interface[7ddcde71cf02e108]::interface::run_compiler<core[b4a1350c838fc0f9]::result::Result<(), rustc_span[9e6cb2d6f72e9bb4]::ErrorGuaranteed>, rustc_driver_impl[9e9e6466696ec967]::run_compiler::{closure#0}>::{closure#0}, core[b4a1350c838fc0f9]::result::Result<(), rustc_span[9e6cb2d6f72e9bb4]::ErrorGuaranteed>>::{closure#0}, core[b4a1350c838fc0f9]::result::Result<(), rustc_span[9e6cb2d6f72e9bb4]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[b4a1350c838fc0f9]::result::Result<(), rustc_span[9e6cb2d6f72e9bb4]::ErrorGuaranteed>>
  47:     0x736420f521c6 - <<std[48784e9e46568672]::thread::Builder>::spawn_unchecked_<rustc_interface[7ddcde71cf02e108]::util::run_in_thread_with_globals<rustc_interface[7ddcde71cf02e108]::util::run_in_thread_pool_with_globals<rustc_interface[7ddcde71cf02e108]::interface::run_compiler<core[b4a1350c838fc0f9]::result::Result<(), rustc_span[9e6cb2d6f72e9bb4]::ErrorGuaranteed>, rustc_driver_impl[9e9e6466696ec967]::run_compiler::{closure#0}>::{closure#0}, core[b4a1350c838fc0f9]::result::Result<(), rustc_span[9e6cb2d6f72e9bb4]::ErrorGuaranteed>>::{closure#0}, core[b4a1350c838fc0f9]::result::Result<(), rustc_span[9e6cb2d6f72e9bb4]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[b4a1350c838fc0f9]::result::Result<(), rustc_span[9e6cb2d6f72e9bb4]::ErrorGuaranteed>>::{closure#1} as core[b4a1350c838fc0f9]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  48:     0x7364225cf919 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h3e016c41180ed802
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/alloc/src/boxed.rs:2015:9
  49:     0x7364225cf919 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hcf0716ba35a33b0c
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/alloc/src/boxed.rs:2015:9
  50:     0x7364225cf919 - std::sys::pal::unix::thread::Thread::new::thread_start::hd585680968d21553
                               at /rustc/b3df0d7e5ef5f7dbeeca3fb289c65680ad013f87/library/std/src/sys/pal/unix/thread.rs:108:17
  51:     0x73642236f55a - <unknown>
  52:     0x7364223eca3c - <unknown>
  53:                0x0 - <unknown>

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.79.0-nightly (b3df0d7e5 2024-03-22) running on x86_64-unknown-linux-gnu

note: compiler flags: -Z unstable-options -Z dump-mir-dir=dir

query stack during panic:
#0 [diagnostic_hir_wf_check] performing HIR wf-checking for predicate `Binder { value: ObjectSafe(DefId(0:3 ~ mvce[230a]::Trait)), bound_vars: [] }` at item `Ty(DefId(0:12 ~ mvce[230a]::Trait::{synthetic#0}))`
#1 [check_well_formed] checking that `Trait::handle` is well-formed
#2 [check_mod_type_wf] checking that types are well-formed in top-level module
#3 [analysis] running analysis passes on this crate
end of query stack
error[E0782]: trait objects must include the `dyn` keyword
 --> /tmp/icemaker_global_tempdir.pLv5S1PJhcgC/rustc_testrunner_tmpdir_reporting.vqm2wcW7QHJ8/mvce.rs:1:32
  |
1 | trait Trait<const module_path: Trait = bar> {
  |                                ^^^^^
  |
help: add `dyn` keyword before this trait
  |
1 | trait Trait<const module_path: dyn Trait = bar> {
  |                                +++

error: aborting due to 9 previous errors

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

slightly more reduced:

trait Trait<const N: Trait = bar> {
    async fn a() {}
}