mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-30 20:44:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![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>>>();
 | |
|     }
 | |
| }
 | 
