Skip coroutines in jump threading to avoid query cycles
This commit is contained in:
parent
ee9c7c940c
commit
5f4e4baddb
@ -68,6 +68,12 @@ fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
|
||||
let def_id = body.source.def_id();
|
||||
debug!(?def_id);
|
||||
|
||||
// Optimizing coroutines creates query cycles.
|
||||
if tcx.is_coroutine(def_id) {
|
||||
trace!("Skipped for coroutine {:?}", def_id);
|
||||
return;
|
||||
}
|
||||
|
||||
let param_env = tcx.param_env_reveal_all_normalized(def_id);
|
||||
let map = Map::new(tcx, body, Some(MAX_PLACES));
|
||||
let loop_headers = loop_headers(body);
|
||||
|
14
tests/ui/mir/mir_query_cycle.rs
Normal file
14
tests/ui/mir/mir_query_cycle.rs
Normal file
@ -0,0 +1,14 @@
|
||||
// Regression test for #121094.
|
||||
// build-pass
|
||||
// compile-flags: -O --crate-type=lib
|
||||
// edition: 2021
|
||||
use std::{future::Future, pin::Pin};
|
||||
|
||||
pub async fn foo(count: u32) {
|
||||
if count == 0 {
|
||||
return
|
||||
} else {
|
||||
let fut: Pin<Box<dyn Future<Output = ()>>> = Box::pin(foo(count - 1));
|
||||
fut.await;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user