about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWesley Wiser <wwiser@gmail.com>2019-09-12 22:03:20 -0400
committerWesley Wiser <wwiser@gmail.com>2019-09-27 20:11:12 -0400
commitfadfd92c2f27fbaf3473f952fb9a35b8fc20693a (patch)
tree07ef062d9591a052af72c380fa79839a4fc8a998
parentc0c8ce80b345dee4f306519c2262c4af687ef818 (diff)
downloadrust-fadfd92c2f27fbaf3473f952fb9a35b8fc20693a.tar.gz
rust-fadfd92c2f27fbaf3473f952fb9a35b8fc20693a.zip
Don't run the ConstProp MIR pass on generators
This can cause cycles as `ConstProp` uses `layout_of` which, for
generators, uses `optimized_mir` which runs `ConstProp`.
-rw-r--r--src/librustc_mir/transform/const_prop.rs8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/librustc_mir/transform/const_prop.rs b/src/librustc_mir/transform/const_prop.rs
index 0653598bc86..7049fee5f8d 100644
--- a/src/librustc_mir/transform/const_prop.rs
+++ b/src/librustc_mir/transform/const_prop.rs
@@ -57,6 +57,14 @@ impl<'tcx> MirPass<'tcx> for ConstProp {
             return
         }
 
+        let is_generator = tcx.type_of(source.def_id()).is_generator();
+        // FIXME(welseywiser) const prop doesn't work on generators because of query cycles
+        // computing their layout.
+        if is_generator {
+            trace!("ConstProp skipped for generator {:?}", source.def_id());
+            return
+        }
+
         trace!("ConstProp starting for {:?}", source.def_id());
 
         // Steal some data we need from `body`.