diff options
| author | Wesley Wiser <wwiser@gmail.com> | 2019-09-12 22:03:20 -0400 |
|---|---|---|
| committer | Wesley Wiser <wwiser@gmail.com> | 2019-09-27 20:11:12 -0400 |
| commit | fadfd92c2f27fbaf3473f952fb9a35b8fc20693a (patch) | |
| tree | 07ef062d9591a052af72c380fa79839a4fc8a998 | |
| parent | c0c8ce80b345dee4f306519c2262c4af687ef818 (diff) | |
| download | rust-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.rs | 8 |
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`. |
