//@ run-pass use std::ops::Deref; struct ArenaSet::Target>(U, &'static V) where V: 'static + ?Sized; static Z: [u8; 4] = [1,2,3,4]; fn arena() -> &'static ArenaSet> { fn __static_ref_initialize() -> ArenaSet> { ArenaSet(vec![], &Z) } unsafe { use std::sync::Once; fn require_sync(_: &T) { } unsafe fn __stability() -> &'static ArenaSet> { use std::mem::transmute; static mut DATA: *const ArenaSet> = std::ptr::null_mut(); static mut ONCE: Once = Once::new(); ONCE.call_once(|| { //~^ WARN creating a shared reference to mutable static is discouraged [static_mut_refs] DATA = transmute ::>>, *const ArenaSet>> (Box::new(__static_ref_initialize())); }); &*DATA } let static_ref = __stability(); require_sync(static_ref); static_ref } } fn main() { let &ArenaSet(ref u, v) = arena(); assert!(u.is_empty()); assert_eq!(v, Z); }