summaryrefslogtreecommitdiffstats
path: root/src/test/ui/drop/drop-trait-enum.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
commit218caa410aa38c29984be31a5229b9fa717560ee (patch)
treec54bd55eeb6e4c508940a30e94c0032fbd45d677 /src/test/ui/drop/drop-trait-enum.rs
parentReleasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-218caa410aa38c29984be31a5229b9fa717560ee.tar.xz
rustc-218caa410aa38c29984be31a5229b9fa717560ee.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/drop/drop-trait-enum.rs')
-rw-r--r--src/test/ui/drop/drop-trait-enum.rs94
1 files changed, 0 insertions, 94 deletions
diff --git a/src/test/ui/drop/drop-trait-enum.rs b/src/test/ui/drop/drop-trait-enum.rs
deleted file mode 100644
index d2b77650a..000000000
--- a/src/test/ui/drop/drop-trait-enum.rs
+++ /dev/null
@@ -1,94 +0,0 @@
-// run-pass
-#![allow(dead_code)]
-#![allow(unused_assignments)]
-#![allow(unused_variables)]
-// ignore-emscripten no threads support
-// needs-unwind
-
-use std::thread;
-use std::sync::mpsc::{channel, Sender};
-
-#[derive(PartialEq, Debug)]
-enum Message {
- Dropped,
- DestructorRan
-}
-
-struct SendOnDrop {
- sender: Sender<Message>
-}
-
-impl Drop for SendOnDrop {
- fn drop(&mut self) {
- self.sender.send(Message::Dropped).unwrap();
- }
-}
-
-enum Foo {
- SimpleVariant(Sender<Message>),
- NestedVariant(Box<usize>, SendOnDrop, Sender<Message>),
- FailingVariant { on_drop: SendOnDrop }
-}
-
-impl Drop for Foo {
- fn drop(&mut self) {
- match self {
- &mut Foo::SimpleVariant(ref mut sender) => {
- sender.send(Message::DestructorRan).unwrap();
- }
- &mut Foo::NestedVariant(_, _, ref mut sender) => {
- sender.send(Message::DestructorRan).unwrap();
- }
- &mut Foo::FailingVariant { .. } => {
- panic!("Failed");
- }
- }
- }
-}
-
-pub fn main() {
- let (sender, receiver) = channel();
- {
- let v = Foo::SimpleVariant(sender);
- }
- assert_eq!(receiver.recv().unwrap(), Message::DestructorRan);
- assert_eq!(receiver.recv().ok(), None);
-
- let (sender, receiver) = channel();
- {
- let v = Foo::NestedVariant(Box::new(42), SendOnDrop { sender: sender.clone() }, sender);
- }
- assert_eq!(receiver.recv().unwrap(), Message::DestructorRan);
- assert_eq!(receiver.recv().unwrap(), Message::Dropped);
- assert_eq!(receiver.recv().ok(), None);
-
- let (sender, receiver) = channel();
- let t = thread::spawn(move|| {
- let v = Foo::FailingVariant { on_drop: SendOnDrop { sender: sender } };
- });
- assert_eq!(receiver.recv().unwrap(), Message::Dropped);
- assert_eq!(receiver.recv().ok(), None);
- drop(t.join());
-
- let (sender, receiver) = channel();
- let t = {
- thread::spawn(move|| {
- let mut v = Foo::NestedVariant(Box::new(42), SendOnDrop {
- sender: sender.clone()
- }, sender.clone());
- v = Foo::NestedVariant(Box::new(42),
- SendOnDrop { sender: sender.clone() },
- sender.clone());
- v = Foo::SimpleVariant(sender.clone());
- v = Foo::FailingVariant { on_drop: SendOnDrop { sender: sender } };
- })
- };
- assert_eq!(receiver.recv().unwrap(), Message::DestructorRan);
- assert_eq!(receiver.recv().unwrap(), Message::Dropped);
- assert_eq!(receiver.recv().unwrap(), Message::DestructorRan);
- assert_eq!(receiver.recv().unwrap(), Message::Dropped);
- assert_eq!(receiver.recv().unwrap(), Message::DestructorRan);
- assert_eq!(receiver.recv().unwrap(), Message::Dropped);
- assert_eq!(receiver.recv().ok(), None);
- drop(t.join());
-}