// Adapted from https://github.com/sunfishcode/mir2cranelift/blob/master/rust-examples/nocore-hello-world.rs
#![feature(
- no_core, unboxed_closures, start, lang_items, box_syntax, slice_patterns, never_type, linkage,
+ no_core, unboxed_closures, start, lang_items, box_syntax, never_type, linkage,
extern_types, thread_local
)]
#![no_core]
macro_rules! assert {
($e:expr) => {
if !$e {
- panic(&(stringify!(! $e), file!(), line!(), 0));
+ panic(stringify!(! $e));
}
};
}
macro_rules! assert_eq {
($l:expr, $r: expr) => {
if $l != $r {
- panic(&(stringify!($l != $r), file!(), line!(), 0));
+ panic(stringify!($l != $r));
}
}
}
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<()>) {}
y: !,
}
- unsafe fn zeroed<T>() -> T {
- intrinsics::init::<T>()
- }
-
unsafe fn uninitialized<T>() -> T {
MaybeUninit { uninit: () }.value.value
}
#[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);
fn check_niche_behavior () {
if let E1::V2 { .. } = (E1::V1 { f: true }) {
- unsafe { intrinsics::abort(); }
+ intrinsics::abort();
}
if let E2::V1 { .. } = E2::V3::<Infallible> {
- unsafe { intrinsics::abort(); }
+ intrinsics::abort();
}
}