about summary refs log tree commit diff
path: root/src/test/ui/dropck
diff options
context:
space:
mode:
authorCaio <c410.f3r@gmail.com>2021-11-18 12:09:34 -0300
committerCaio <c410.f3r@gmail.com>2021-11-18 12:09:34 -0300
commit41d9abd76cd514aca23e3409fe6896a3a7d61d1a (patch)
treeaff7d6c42e88201c903006083095106fd082f16b /src/test/ui/dropck
parent6414e0b5b308d3ae27da83c6a25098cc8aadc1a9 (diff)
downloadrust-41d9abd76cd514aca23e3409fe6896a3a7d61d1a.tar.gz
rust-41d9abd76cd514aca23e3409fe6896a3a7d61d1a.zip
Move some tests to more reasonable directories
Diffstat (limited to 'src/test/ui/dropck')
-rw-r--r--src/test/ui/dropck/cleanup-arm-conditional.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/test/ui/dropck/cleanup-arm-conditional.rs b/src/test/ui/dropck/cleanup-arm-conditional.rs
new file mode 100644
index 00000000000..38c717089c4
--- /dev/null
+++ b/src/test/ui/dropck/cleanup-arm-conditional.rs
@@ -0,0 +1,39 @@
+// run-pass
+
+#![allow(stable_features)]
+#![allow(unused_imports)]
+// Test that cleanup scope for temporaries created in a match
+// arm is confined to the match arm itself.
+
+// pretty-expanded FIXME #23616
+
+#![feature(os)]
+
+use std::os;
+
+struct Test { x: isize }
+
+impl Test {
+    fn get_x(&self) -> Option<Box<isize>> {
+        Some(Box::new(self.x))
+    }
+}
+
+fn do_something(t: &Test) -> isize {
+
+    // The cleanup scope for the result of `t.get_x()` should be the
+    // arm itself and not the match, otherwise we'll (potentially) get
+    // a crash trying to free an uninitialized stack slot.
+
+    match t {
+        &Test { x: 2 } if t.get_x().is_some() => {
+            t.x * 2
+        }
+        _ => { 22 }
+    }
+}
+
+pub fn main() {
+    let t = Test { x: 1 };
+    do_something(&t);
+}