This commit is contained in:
bjorn3 2020-03-18 20:33:29 +01:00
parent d464169beb
commit d74c151b69
2 changed files with 8 additions and 5 deletions

View File

@ -481,6 +481,7 @@ pub mod intrinsics {
pub fn needs_drop<T>() -> bool;
pub fn bitreverse<T>(x: T) -> T;
pub fn bswap<T>(x: T) -> T;
pub fn write_bytes<T>(dst: *mut T, val: u8, count: usize);
}
}

View File

@ -117,6 +117,12 @@ struct Unique<T: ?Sized> {
impl<T: ?Sized, U: ?Sized> CoerceUnsized<Unique<U>> for Unique<T> where T: Unsize<U> {}
unsafe fn zeroed<T>() -> T {
let mut uninit = MaybeUninit { uninit: () };
intrinsics::write_bytes(&mut uninit.value.value as *mut T, 0, 1);
uninit.value.value
}
fn take_f32(_f: f32) {}
fn take_unique(_u: Unique<()>) {}
@ -194,10 +200,6 @@ fn main() {
y: !,
}
unsafe fn zeroed<T>() -> T {
intrinsics::init::<T>()
}
unsafe fn uninitialized<T>() -> T {
MaybeUninit { uninit: () }.value.value
}
@ -330,7 +332,7 @@ extern "C" fn mutate_tls(_: *mut c_void) -> *mut c_void {
#[cfg(not(jit))]
fn test_tls() {
unsafe {
let mut attr: pthread_attr_t = intrinsics::init();
let mut attr: pthread_attr_t = zeroed();
let mut thread: pthread_t = 0;
assert_eq!(TLS, 42);