about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform/src
diff options
context:
space:
mode:
authorTomasz Miąsko <tomasz.miasko@gmail.com>2024-02-15 00:00:00 +0000
committerTomasz Miąsko <tomasz.miasko@gmail.com>2024-02-15 00:00:00 +0000
commit5f4e4baddb104ee3e63d1db24a4c2a73e1a703cf (patch)
treeda099695749eac3be1ffd25e9f28e95ff5cefa54 /compiler/rustc_mir_transform/src
parentee9c7c940c07d8b67c9a6b2ec930db70dcd23a46 (diff)
downloadrust-5f4e4baddb104ee3e63d1db24a4c2a73e1a703cf.tar.gz
rust-5f4e4baddb104ee3e63d1db24a4c2a73e1a703cf.zip
Skip coroutines in jump threading to avoid query cycles
Diffstat (limited to 'compiler/rustc_mir_transform/src')
-rw-r--r--compiler/rustc_mir_transform/src/jump_threading.rs6
1 files changed, 6 insertions, 0 deletions
diff --git a/compiler/rustc_mir_transform/src/jump_threading.rs b/compiler/rustc_mir_transform/src/jump_threading.rs
index 78ba166ba43..ad8f21ffbda 100644
--- a/compiler/rustc_mir_transform/src/jump_threading.rs
+++ b/compiler/rustc_mir_transform/src/jump_threading.rs
@@ -68,6 +68,12 @@ impl<'tcx> MirPass<'tcx> for JumpThreading {
         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);