diff options
| author | Matthew Jasper <mjjasper1@gmail.com> | 2019-03-03 19:27:41 +0000 |
|---|---|---|
| committer | Matthew Jasper <mjjasper1@gmail.com> | 2019-03-03 20:34:26 +0000 |
| commit | 8a7801908c6b8f142a0b31f0582e526fb7369833 (patch) | |
| tree | 2f0e5032a79cdbe7672342ff76327b72a4721faa /src/test | |
| parent | 2131b153b33f7ba2dc0a7cd3ea4efd1bc4a03ba2 (diff) | |
| download | rust-8a7801908c6b8f142a0b31f0582e526fb7369833.tar.gz rust-8a7801908c6b8f142a0b31f0582e526fb7369833.zip | |
Don't incorrectly mark blocks in generator drop shims as cleanup
This also ensure that dropping a generator won't leak upvars if dropping one of them panics
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/mir-opt/generator-drop-cleanup.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/test/mir-opt/generator-drop-cleanup.rs b/src/test/mir-opt/generator-drop-cleanup.rs new file mode 100644 index 00000000000..48398691271 --- /dev/null +++ b/src/test/mir-opt/generator-drop-cleanup.rs @@ -0,0 +1,43 @@ +#![feature(generators, generator_trait)] + +// Regression test for #58892, generator drop shims should not have blocks +// spuriously marked as cleanup + +fn main() { + let gen = || { + yield; + }; +} + +// END RUST SOURCE + +// START rustc.main-{{closure}}.generator_drop.0.mir +// bb0: { +// switchInt(((*_1).0: u32)) -> [0u32: bb4, 3u32: bb7, otherwise: bb8]; +// } +// bb1: { +// goto -> bb5; +// } +// bb2: { +// return; +// } +// bb3: { +// return; +// } +// bb4: { +// goto -> bb6; +// } +// bb5: { +// goto -> bb2; +// } +// bb6: { +// goto -> bb3; +// } +// bb7: { +// StorageLive(_3); +// goto -> bb1; +// } +// bb8: { +// return; +// } +// END rustc.main-{{closure}}.generator_drop.0.mir |
