-
Notifications
You must be signed in to change notification settings - Fork 12.9k
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
Cycle detected when optimizing MIR on nightly #129811
Comments
this kind of looks like it should be an ICE instead? 🤔 |
For now, though, you'll need to either stop using |
Minimized: #![feature(async_closure)]
use std::future::Future;
async fn orchestrate_memd_routing<Fut: Future>(operation: impl Fn() -> Fut) {
operation().await;
}
pub async fn orchestrate_simple_crud() {
orchestrate_memd_routing(async || async {}.await).await;
} To reproduce: (Odd that the "optimization" also happens in debug builds.) Of note: During the minimization process, rust-analyzer froze multiple times. And a few times, |
@theemathas you're awesome! thanks for the minimization. |
Thanks for confirming.
We were having a lot of issues with lifetimes when using the async blocks which lead to us using async closures instead. Possibly we should just revisit that... |
@chvck You might be interested in these two links for an explanation on how exactly async closures differ from a closure that returns an async block: https://blog.rust-lang.org/inside-rust/2024/08/09/async-closures-call-for-testing.html |
Thanks @theemathas I'll take a look at those. |
Rollup merge of rust-lang#129847 - compiler-errors:async-cycle, r=davidtwco Do not call query to compute coroutine layout for synthetic body of async closure There is code in the MIR validator that attempts to prevent query cycles when inlining a coroutine into itself, and will use the coroutine layout directly from the body when it detects that's the same coroutine as the one that's being validated. After rust-lang#128506, this logic didn't take into account the fact that the coroutine def id will differ if it's the "by-move body" of an async closure. This PR implements that. Fixes rust-lang#129811
Originally posted at https://users.rust-lang.org/t/cycle-detected-when-optimizing-mir-on-nightly/116849/1 and filing this upon request from @bjorn3 .
We're using nightly rust and as of nightly-2024-08-29 (prior to this it compiled fine) we see the following error:
Function being flagged can be viewed at couchbase-rs/sdk/couchbase-core/src/crudcomponent.rs at nativex · couchbaselabs/couchbase-rs · GitHub. We're having a bit of a hard time debugging this issue, it's not very clear what this actually means. I've tried looking at the HIR output but it didn't really help and I'm a bit lost on this one as I'm not familiar with MIR.
I expected to see this happen: Compilation succeed.
Instead, this happened: Compilation failed due to MIR cycle.
Meta
rustc --version --verbose
:Backtrace contained no extra information.
The text was updated successfully, but these errors were encountered: