Repository: rust
Issue: ICE: "forcing query with already existing `DepNode`" with many async calls
Labels: I-ICE,P-medium,T-compiler,C-bug,A-async-await,AsyncAwait-Triaged,A-query-system,S-needs-repro

<!--
Thank you for finding an Internal Compiler Error! 🧊  If possible, try to provide
a minimal verifiable example. You can read "Rust Bug Minimization Patterns" for
how to create smaller examples.
http://blog.pnkfx.org/blog/2019/11/18/rust-bug-minimization-patterns/
-->

### Code

I can not provide all rust code and I was unable to recreate a minimal reproducable example. I have tried for some time now.
I currently run nightly to have access to async in trait feature.
The async in trait is used to abstract dbus implementations using zbus for production and for development a direct object is returned.
The zbus production code performs 1 proxy creation async call and 16 dbus calls.

If I remove all the async dbus calls rustc does not crash:

```Rust
pub trait ModemTrait: Sized + Send + Sync + 'static {
    fn new() -> impl Future<Output = Result<Self, HalError>> + Send;
    fn get_modem_info(&self) -> impl Future<Output = Result<ModemInfo, HalError>> + Send + '_;
}

pub struct ModemController {
    conn: Connection,
}

impl ModemTrait for ModemController {
    async fn new() -> Result<Self, HalError> {
        let conn = Connection::system().await?;

        let ret = Self { conn };

        Ok(ret)
    }

    fn get_modem_info(&self) -> impl Future<Output = Result<ModemInfo, HalError>> + Send + '_ {
        async {
            let proxy = PppDbusProxy::new(&self.conn).await?;

            // Ok(ModemInfo::default())

            Ok(ModemInfo {
                sim_pin_status: proxy.get_sim_pin_status().await?,
                initialized: proxy.is_initialized().await?,
                online: proxy.is_online().await?,
                modem_manufacturer: proxy.get_modem_manufacturer().await?,
                modem_model: proxy.get_modem_model().await?,
                modem_imei: proxy.get_modem_imei().await?,
                modem_firmware_version: proxy.get_modem_firmware_version().await?,
                iccid: proxy.get_ccid().await?,
                network_type: proxy.get_network_type().await?,
                network_operator: proxy.get_network_operator().await?,
                signal_power: proxy.get_signal_power().await?,
                signal_power_condition: proxy.get_signal_power_condition().await?,
                signal_quality_rating: proxy.get_signal_quality_rating().await?,
                signal_quality_source: proxy.get_signal_quality_source().await?,
                mobile_network_operator_profile: proxy
                    .get_mobile_network_operators_profile()
                    .await?,
                ppp_connection_start: proxy.get_ppp_connection_start_time().await?,
            })
        }
    }
}
```

### Meta

`rustc --version --verbose`:
```
rustc 1.72.0-nightly (a97c36dd2 2023-06-07)
binary: rustc
commit-hash: a97c36dd2e6f711949fc9b790476e93bd9e6d1f4
commit-date: 2023-06-07
host: x86_64-pc-windows-msvc
release: 1.72.0-nightly
LLVM version: 16.0.5
```

### Error output

See backtrace

<!--
Include a backtrace in the code block by setting `RUST_BACKTRACE=1` in your
environment. E.g. `RUST_BACKTRACE=1 cargo build`.
-->
<details><summary><strong>Backtrace</strong></summary>
<p>

```
thread 'rustc' panicked at 'forcing query with already existing `DepNode`
- query-key: Canonical { value: ParamEnvAnd { param_env: ParamEnv { caller_bounds: [], reveal: All, constness: NotConst }, value: Binder(TraitPredicate(<for<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k, 'l, 'm, 'n, 'o, 'p, 'q, 'r, 's, 't, 'u, 'v> {std::future::ResumeTy, &'a hal::modem::PppDbusProxy<'b>, hal::modem::PppDbusProxy<'c>, &'d zbus::proxy::Proxy<'e>, zbus::proxy::Proxy<'f>, &'g str, (), &'h (), impl futures::Future<Output = std::result::Result<i32, zbus::error::Error>>, impl futures::Future<Output = std::result::Result<i32, zbus::error::Error>>} as std::marker::Send>, polarity:Positive), []) }, max_universe: U0, variables: [] }
- dep-node: evaluate_obligation(b9c844e08ed73076-be2511b0687549ec)', /rustc/a97c36dd2e6f711949fc9b790476e93bd9e6d1f4\compiler\rustc_query_system\src\dep_graph\graph.rs:350:9
stack backtrace:
   0:     0x7ffde0d6616c - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h9f8452425a9293aa
   1:     0x7ffde0d9f42b - core::fmt::write::h2eda102ff29c5ee0
   2:     0x7ffde0d5b899 - <std::io::IoSlice as core::fmt::Debug>::fmt::he00f0eb5510d32b6
   3:     0x7ffde0d65f1b - std::sys::common::alloc::realloc_fallback::h0fb58e6852cd6235
   4:     0x7ffde0d69779 - std::panicking::default_hook::h3f902ef65094b7fd
   5:     0x7ffde0d6942f - std::panicking::default_hook::h3f902ef65094b7fd
   6:     0x7ffdd02758ba - rustc_driver_impl[47427ea40f3562ca]::install_ice_hook
   7:     0x7ffde0d69ea0 - std::panicking::rust_panic_with_hook::h8862750156c5b4fc
   8:     0x7ffde0d69c2d - <std::panicking::begin_panic_handler::StrPanicPayload as core::panic::BoxMeUp>::get::h50bc229817f9c976
   9:     0x7ffde0d66d99 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h9f8452425a9293aa
  10:     0x7ffde0d69930 - rust_begin_unwind
  11:     0x7ffde0dd2e25 - core::panicking::panic_fmt::h183ebee5e4d5a07e
  12:     0x7ffdcfc208a4 - rustc_query_impl[b3acef907b3c9332]::query_callbacks
  13:     0x7ffdcfbf8aa7 - rustc_query_impl[b3acef907b3c9332]::query_callbacks
  14:     0x7ffdd000d59a - <rustc_trait_selection[cae6069403985fd3]::traits::fulfill::FulfillProcessor as rustc_data_structures[f61cfa0a0c0e7b14]::obligation_forest::ObligationProcessor>::process_obligation
  15:     0x7ffdcff43ab0 - <rustc_lint[ba9bc166ab672c34]::nonstandard_style::NonUpperCaseGlobals as rustc_lint[ba9bc166ab672c34]::passes::LateLintPass>::check_generic_param
  16:     0x7ffdd000abe1 - <rustc_trait_selection[cae6069403985fd3]::traits::fulfill::FulfillmentContext as rustc_infer[2c113e582cf24f1]::traits::engine::TraitEngine>::select_where_possible
  17:     0x7ffdcfb2c4ec - <polonius_engine[d666f5c24090ec1]::facts::AllFacts<rustc_borrowck[a4658bf187082e81]::facts::RustcFacts> as rustc_borrowck[a4658bf187082e81]::facts::AllFactsExt>::enabled
  18:     0x7ffdcfb8dce4 - rustc_query_impl[b3acef907b3c9332]::query_callbacks
  19:     0x7ffdcfbb89e4 - rustc_query_impl[b3acef907b3c9332]::query_callbacks
  20:     0x7ffdce5e8bf5 - rustc_query_impl[b3acef907b3c9332]::profiling_support::alloc_self_profile_query_strings
  21:     0x7ffdce53a7aa - rustc_query_impl[b3acef907b3c9332]::profiling_support::alloc_self_profile_query_strings
  22:     0x7ffdcfc53d18 - rustc_query_impl[b3acef907b3c9332]::query_callbacks
  23:     0x7ffdcfbcd3dc - rustc_query_impl[b3acef907b3c9332]::query_callbacks
  24:     0x7ffdcf38e201 - <winapi_util[be25da47fda99d33]::file::Information>::number_of_links
  25:     0x7ffdcfb8d550 - rustc_query_impl[b3acef907b3c9332]::query_callbacks
  26:     0x7ffdcfc19434 - rustc_query_impl[b3acef907b3c9332]::query_callbacks
  27:     0x7ffdcfbf8e49 - rustc_query_impl[b3acef907b3c9332]::query_callbacks
  28:     0x7ffdd01044df - <rustc_middle[2d27bf43a2f0f270]::ty::instance::Instance>::expect_resolve
  29:     0x7ffdcf5aeb3d - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_constant
  30:     0x7ffdcf5ab99d - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  31:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  32:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  33:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  34:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  35:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  36:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  37:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  38:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  39:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  40:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  41:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  42:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  43:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  44:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  45:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  46:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  47:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  48:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  49:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  50:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  51:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  52:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  53:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  54:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  55:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  56:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  57:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  58:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  59:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  60:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  61:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  62:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  63:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  64:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  65:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  66:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  67:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  68:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  69:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  70:     0x7ffdcf5acf3b - <rustc_monomorphize[86b5476df028a03b]::collector::MirUsedCollector as rustc_middle[2d27bf43a2f0f270]::mir::visit::Visitor>::visit_operand
  71:     0x7ffdce2c469a - rustc_monomorphize[86b5476df028a03b]::provide
  72:     0x7ffdce2c42f2 - rustc_monomorphize[86b5476df028a03b]::provide
  73:     0x7ffdce2c0009 - rustc_monomorphize[86b5476df028a03b]::provide
  74:     0x7ffdce2c0a50 - rustc_monomorphize[86b5476df028a03b]::provide
  75:     0x7ffdce52b92a - rustc_query_impl[b3acef907b3c9332]::profiling_support::alloc_self_profile_query_strings
  76:     0x7ffdce50eaad - rustc_query_impl[b3acef907b3c9332]::profiling_support::alloc_self_profile_query_strings
  77:     0x7ffdce5e8a8c - rustc_query_impl[b3acef907b3c9332]::profiling_support::alloc_self_profile_query_strings
  78:     0x7ffdce538be7 - rustc_query_impl[b3acef907b3c9332]::profiling_support::alloc_self_profile_query_strings
  79:     0x7ffdce59bc4a - rustc_query_impl[b3acef907b3c9332]::profiling_support::alloc_self_profile_query_strings
  80:     0x7ffdd2093d00 - <rustc_query_impl[b3acef907b3c9332]::plumbing::QueryCtxt as rustc_query_system[f98e4918ea2c4399]::query::QueryContext>::depth_limit_error
  81:     0x7ffdcdb6d7d0 - <rustc_codegen_llvm[4a50c542f08b5a28]::llvm_::ffi::Type>::i8p_llcx
  82:     0x7ffdcdb528e9 - <rustc_codegen_llvm[4a50c542f08b5a28]::LlvmCodegenBackend as rustc_codegen_ssa[ad0b9fd6d43b463a]::traits::backend::CodegenBackend>::codegen_crate
  83:     0x7ffdcdb17db8 - rustc_interface[df1410a9ca1fcbf5]::passes::start_codegen
  84:     0x7ffdcdb25fb3 - rustc_interface[df1410a9ca1fcbf5]::util::build_output_filenames
  85:     0x7ffdcdb1da55 - <rustc_interface[df1410a9ca1fcbf5]::queries::Queries>::ongoing_codegen
  86:     0x7ffdcdad8f14 - rustc_driver_impl[47427ea40f3562ca]::main
  87:     0x7ffdcdaf8a3b - <rustc_middle[2d27bf43a2f0f270]::ty::SymbolName as core[cbb6584da310abea]::fmt::Debug>::fmt
  88:     0x7ffdcdaf6c76 - <rustc_middle[2d27bf43a2f0f270]::ty::SymbolName as core[cbb6584da310abea]::fmt::Debug>::fmt
  89:     0x7ffde0d7d2cc - std::sys::windows::thread::Thread::new::hdc4d105fd5a00159
  90:     0x7ffe83ef7614 - BaseThreadInitThunk
  91:     0x7ffe842426a1 - RtlUserThreadStart

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: rustc 1.72.0-nightly (a97c36dd2 2023-06-07) 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 [evaluate_obligation] evaluating trait selection obligation `for<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k, 'l, 'm, 'n, 'o, 'p, 'q, 'r, 's, 't, 'u, 'v> {core::future::ResumeTy, &'a hal::modem::PppDbusProxy<'b>, hal::modem::PppDbusProxy<'c>, &'d zbus::proxy::Proxy<'e>, zbus::proxy::Proxy<'f>, &'g str, (), &'h 
(), zbus::proxy::Proxy<'a>::call::{opaque#0}, zbus::proxy::Proxy<'a>::call::{opaque#0}}: core::marker::Send`
#1 [codegen_select_candidate] computing candidate for `<axum_api::ApiState<hal::Cu, hal::ups_mon::UpsMon, hal::modem::ModemController, hal::led_ctrl::LedCtrl>::modem_info as axum::handler::Handler<(axum_core::extract::private::ViaParts, axum::extract::state::State<alloc::sync::Arc<axum_api::ApiState<hal::Cu, hal::ups_mon::UpsMon, hal::modem::ModemController, hal::led_ctrl::LedCtrl>>>), alloc::sync::Arc<axum_api::ApiState<hal::Cu, hal::ups_mon::UpsMon, hal::modem::ModemController, hal::led_ctrl::LedCtrl>>>>`
#2 [resolve_instance] resolving instance `<axum_api::ApiState<hal::Cu, hal::ups_mon::UpsMon, hal::modem::ModemController, hal::led_ctrl::LedCtrl>::modem_info as axum::handler::Handler<(axum_core::extract::private::ViaParts, axum::extract::state::State<alloc::sync::Arc<axum_api::ApiState<hal::Cu, hal::ups_mon::UpsMon, hal::modem::ModemController, hal::led_ctrl::LedCtrl>>>), alloc::sync::Arc<axum_api::ApiState<hal::Cu, hal::ups_mon::UpsMon, hal::modem::ModemController, hal::led_ctrl::LedCtrl>>>>::with_state`
#3 [collect_and_partition_mono_items] collect_and_partition_mono_items
end of query stack
```

</p>
</details>