| //@ run-pass | 
 | //@ needs-unwind | 
 |  | 
 | #![allow(non_camel_case_types)] | 
 | //@ needs-threads | 
 |  | 
 | 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()); | 
 | } |