about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorMatthew Jasper <mjjasper1@gmail.com>2019-03-03 19:27:41 +0000
committerMatthew Jasper <mjjasper1@gmail.com>2019-03-03 20:34:26 +0000
commit8a7801908c6b8f142a0b31f0582e526fb7369833 (patch)
tree2f0e5032a79cdbe7672342ff76327b72a4721faa /src/test
parent2131b153b33f7ba2dc0a7cd3ea4efd1bc4a03ba2 (diff)
downloadrust-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.rs43
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