1 // Adapted from https://github.com/sunfishcode/mir2cranelift/blob/master/rust-examples/nocore-hello-world.rs
3 #![feature(no_core, unboxed_closures, start, lang_items, box_syntax, slice_patterns, never_type, linkage)]
7 extern crate mini_core;
10 use mini_core::libc::*;
12 unsafe extern "C" fn my_puts(s: *const u8) {
16 #[lang = "termination"]
18 fn report(self) -> i32;
21 impl Termination for () {
22 fn report(self) -> i32 {
24 NUM = 6 * 7 + 1 + (1u8 == 1u8) as u8; // 44
31 fn object_safe(&self);
34 impl SomeTrait for &'static str {
35 fn object_safe(&self) {
37 puts(*self as *const str as *const u8);
44 inner: NoisyDropInner,
47 struct NoisyDropInner;
49 impl Drop for NoisyDrop {
52 puts(self.text as *const str as *const u8);
57 impl Drop for NoisyDropInner {
60 puts("Inner got dropped!\0" as *const str as *const u8);
65 impl SomeTrait for NoisyDrop {
66 fn object_safe(&self) {}
76 fn start<T: Termination + 'static>(
79 argv: *const *const u8,
82 unsafe { puts(*argv); }
83 unsafe { puts(*((argv as usize + intrinsics::size_of::<*const u8>()) as *const *const u8)); }
84 unsafe { puts(*((argv as usize + 2 * intrinsics::size_of::<*const u8>()) as *const *const u8)); }
91 static mut NUM: u8 = 6 * 7;
92 static NUM_REF: &'static u8 = unsafe { &NUM };
97 panic(&(stringify!(! $e), file!(), line!(), 0));
102 macro_rules! assert_eq {
103 ($l:expr, $r: expr) => {
105 panic(&(stringify!($l != $r), file!(), line!(), 0));
110 struct Unique<T: ?Sized> {
112 _marker: PhantomData<T>,
115 impl<T: ?Sized, U: ?Sized> CoerceUnsized<Unique<U>> for Unique<T> where T: Unsize<U> {}
117 fn take_f32(_f: f32) {}
118 fn take_unique(_u: Unique<()>) {}
120 fn checked_div_i128(lhs: i128, rhs: i128) -> Option<i128> {
121 if rhs == 0 || (lhs == -170141183460469231731687303715884105728 && rhs == -1) {
124 Some(unsafe { intrinsics::unchecked_div(lhs, rhs) })
128 fn checked_div_u128(lhs: u128, rhs: u128) -> Option<u128> {
131 rhs => Some(unsafe { intrinsics::unchecked_div(lhs, rhs) })
136 checked_div_i128(0i128, 2i128);
137 checked_div_u128(0u128, 2u128);