--- /dev/null
+#![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 test_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>>>();
+ }
+}
+++ /dev/null
-// run-pass
-#![allow(dead_code)]
-
-use std::panic::{UnwindSafe, AssertUnwindSafe};
-use std::cell::RefCell;
-use std::sync::{Mutex, RwLock, Arc};
-use std::rc::Rc;
-
-struct Foo { a: i32 }
-
-fn assert<T: UnwindSafe + ?Sized>() {}
-
-fn main() {
- 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>>>();
- }
-}