2018-08-30 07:18:55 -05:00
|
|
|
// run-pass
|
2018-09-25 16:51:35 -05:00
|
|
|
#![allow(dead_code)]
|
|
|
|
#![allow(unused_variables)]
|
|
|
|
#![allow(unused_imports)]
|
2015-03-22 15:13:15 -05:00
|
|
|
// pretty-expanded FIXME #23616
|
|
|
|
|
2015-01-06 16:33:42 -06:00
|
|
|
use std::marker;
|
2014-12-22 05:29:46 -06:00
|
|
|
use std::cell::UnsafeCell;
|
2014-03-12 19:02:31 -05:00
|
|
|
|
2014-12-23 03:57:44 -06:00
|
|
|
struct MyUnsafePack<T>(UnsafeCell<T>);
|
|
|
|
|
|
|
|
unsafe impl<T: Send> Sync for MyUnsafePack<T> {}
|
|
|
|
|
2014-03-12 19:02:31 -05:00
|
|
|
struct MyUnsafe<T> {
|
2014-12-23 03:57:44 -06:00
|
|
|
value: MyUnsafePack<T>
|
2014-03-12 19:02:31 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
impl<T> MyUnsafe<T> {
|
|
|
|
fn forbidden(&self) {}
|
|
|
|
}
|
|
|
|
|
2014-12-23 03:57:44 -06:00
|
|
|
unsafe impl<T: Send> Sync for MyUnsafe<T> {}
|
2014-12-22 10:15:51 -06:00
|
|
|
|
2014-03-12 19:02:31 -05:00
|
|
|
enum UnsafeEnum<T> {
|
|
|
|
VariantSafe,
|
2014-12-22 10:15:51 -06:00
|
|
|
VariantUnsafe(UnsafeCell<T>)
|
2014-03-12 19:02:31 -05:00
|
|
|
}
|
|
|
|
|
2014-12-23 03:57:44 -06:00
|
|
|
unsafe impl<T: Send> Sync for UnsafeEnum<T> {}
|
2014-12-22 10:15:51 -06:00
|
|
|
|
2015-03-25 19:06:52 -05:00
|
|
|
static STATIC1: UnsafeEnum<isize> = UnsafeEnum::VariantSafe;
|
2014-03-12 19:02:31 -05:00
|
|
|
|
2015-05-27 03:18:36 -05:00
|
|
|
static STATIC2: MyUnsafePack<isize> = MyUnsafePack(UnsafeCell::new(1));
|
|
|
|
const CONST: MyUnsafePack<isize> = MyUnsafePack(UnsafeCell::new(1));
|
2015-03-25 19:06:52 -05:00
|
|
|
static STATIC3: MyUnsafe<isize> = MyUnsafe{value: CONST};
|
2014-03-12 19:02:31 -05:00
|
|
|
|
2015-03-25 19:06:52 -05:00
|
|
|
static STATIC4: &'static MyUnsafePack<isize> = &STATIC2;
|
2014-03-12 19:02:31 -05:00
|
|
|
|
2014-03-22 13:49:25 -05:00
|
|
|
struct Wrap<T> {
|
|
|
|
value: T
|
|
|
|
}
|
|
|
|
|
2014-12-21 17:49:42 -06:00
|
|
|
unsafe impl<T: Send> Sync for Wrap<T> {}
|
2014-12-06 10:39:25 -06:00
|
|
|
|
2015-05-27 03:18:36 -05:00
|
|
|
static UNSAFE: MyUnsafePack<isize> = MyUnsafePack(UnsafeCell::new(2));
|
2015-03-25 19:06:52 -05:00
|
|
|
static WRAPPED_UNSAFE: Wrap<&'static MyUnsafePack<isize>> = Wrap { value: &UNSAFE };
|
2014-03-12 19:02:31 -05:00
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let a = &STATIC1;
|
|
|
|
|
|
|
|
STATIC3.forbidden()
|
|
|
|
}
|