about summary refs log tree commit diff
path: root/src/test/ui/drop
diff options
context:
space:
mode:
authorDylan MacKenzie <ecstaticmorse@gmail.com>2021-11-10 16:22:16 -0800
committerDylan MacKenzie <ecstaticmorse@gmail.com>2021-11-13 11:16:57 -0800
commitd846fe052294be6bd763bfb08479c9b93cda90fd (patch)
tree81c0fe9f621ac8d36468d5683a65cdd047b05867 /src/test/ui/drop
parentbea1bde8c7e5616a9dc9d501622bdeb5772501b9 (diff)
downloadrust-d846fe052294be6bd763bfb08479c9b93cda90fd.tar.gz
rust-d846fe052294be6bd763bfb08479c9b93cda90fd.zip
Add regression test for #90752
Diffstat (limited to 'src/test/ui/drop')
-rw-r--r--src/test/ui/drop/issue-90752.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/test/ui/drop/issue-90752.rs b/src/test/ui/drop/issue-90752.rs
new file mode 100644
index 00000000000..4395e45e773
--- /dev/null
+++ b/src/test/ui/drop/issue-90752.rs
@@ -0,0 +1,32 @@
+// run-pass
+
+use std::cell::RefCell;
+
+struct S<'a>(i32, &'a RefCell<Vec<i32>>);
+
+impl<'a> Drop for S<'a> {
+    fn drop(&mut self) {
+        self.1.borrow_mut().push(self.0);
+    }
+}
+
+fn test(drops: &RefCell<Vec<i32>>) {
+    let mut foo = None;
+    match foo {
+        None => (),
+        _ => return,
+    }
+
+    *(&mut foo) = Some((S(0, drops), S(1, drops))); // Both S(0) and S(1) should be dropped
+
+    match foo {
+        Some((_x, _)) => {}
+        _ => {}
+    }
+}
+
+fn main() {
+    let drops = RefCell::new(Vec::new());
+    test(&drops);
+    assert_eq!(*drops.borrow(), &[0, 1]);
+}