| #![allow(dead_code)] | |
| use std::cell::RefCell; | |
| use std::panic::{AssertUnwindSafe, UnwindSafe}; | |
| use std::rc::Rc; | |
| use std::sync::{Arc, Mutex, RwLock}; | |
| struct Foo { | |
| a: i32, | |
| } | |
| fn assert<T: UnwindSafe + ?Sized>() {} | |
| #[test] | |
| fn panic_safety_traits() { | |
| assert::<i32>(); | |
| assert::<&i32>(); | |
| assert::<*mut i32>(); | |
| assert::<*const i32>(); | |
| assert::<usize>(); | |
| assert::<str>(); | |
| assert::<&str>(); | |
| assert::<Foo>(); | |
| assert::<&Foo>(); | |
| assert::<Vec<i32>>(); | |
| assert::<String>(); | |
| assert::<RefCell<i32>>(); | |
| assert::<Box<i32>>(); | |
| assert::<Mutex<i32>>(); | |
| assert::<RwLock<i32>>(); | |
| assert::<&Mutex<i32>>(); | |
| assert::<&RwLock<i32>>(); | |
| assert::<Rc<i32>>(); | |
| assert::<Arc<i32>>(); | |
| assert::<Box<[u8]>>(); | |
| { | |
| trait Trait: UnwindSafe {} | |
| assert::<Box<dyn Trait>>(); | |
| } | |
| fn bar<T>() { | |
| assert::<Mutex<T>>(); | |
| assert::<RwLock<T>>(); | |
| } | |
| fn baz<T: UnwindSafe>() { | |
| assert::<Box<T>>(); | |
| assert::<Vec<T>>(); | |
| assert::<RefCell<T>>(); | |
| assert::<AssertUnwindSafe<T>>(); | |
| assert::<&AssertUnwindSafe<T>>(); | |
| assert::<Rc<AssertUnwindSafe<T>>>(); | |
| assert::<Arc<AssertUnwindSafe<T>>>(); | |
| } | |
| } |