// run-pass #![allow(dead_code)] #![allow(unused_variables)] #![allow(unused_imports)] // pretty-expanded FIXME #23616 use std::marker; use std::cell::UnsafeCell; struct MyUnsafePack(UnsafeCell); unsafe impl Sync for MyUnsafePack {} struct MyUnsafe { value: MyUnsafePack } impl MyUnsafe { fn forbidden(&self) {} } unsafe impl Sync for MyUnsafe {} enum UnsafeEnum { VariantSafe, VariantUnsafe(UnsafeCell) } unsafe impl Sync for UnsafeEnum {} static STATIC1: UnsafeEnum = UnsafeEnum::VariantSafe; static STATIC2: MyUnsafePack = MyUnsafePack(UnsafeCell::new(1)); const CONST: MyUnsafePack = MyUnsafePack(UnsafeCell::new(1)); static STATIC3: MyUnsafe = MyUnsafe{value: CONST}; static STATIC4: &'static MyUnsafePack = &STATIC2; struct Wrap { value: T } unsafe impl Sync for Wrap {} static UNSAFE: MyUnsafePack = MyUnsafePack(UnsafeCell::new(2)); static WRAPPED_UNSAFE: Wrap<&'static MyUnsafePack> = Wrap { value: &UNSAFE }; fn main() { let a = &STATIC1; STATIC3.forbidden() }