diff options
Diffstat (limited to 'tests/ui/threads-sendsync/unwind-resource.rs')
-rw-r--r-- | tests/ui/threads-sendsync/unwind-resource.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/ui/threads-sendsync/unwind-resource.rs b/tests/ui/threads-sendsync/unwind-resource.rs new file mode 100644 index 000000000..6950a9c40 --- /dev/null +++ b/tests/ui/threads-sendsync/unwind-resource.rs @@ -0,0 +1,40 @@ +// run-pass +// needs-unwind + +#![allow(non_camel_case_types)] +// ignore-emscripten no threads support + +use std::sync::mpsc::{channel, Sender}; +use std::thread; + +struct complainer { + tx: Sender<bool>, +} + +impl Drop for complainer { + fn drop(&mut self) { + println!("About to send!"); + self.tx.send(true).unwrap(); + println!("Sent!"); + } +} + +fn complainer(tx: Sender<bool>) -> complainer { + println!("Hello!"); + complainer { + tx: tx + } +} + +fn f(tx: Sender<bool>) { + let _tx = complainer(tx); + panic!(); +} + +pub fn main() { + let (tx, rx) = channel(); + let t = thread::spawn(move|| f(tx.clone())); + println!("hiiiiiiiii"); + assert!(rx.recv().unwrap()); + drop(t.join()); +} |