See https://github.com/thepowersgang/mrustc/archive/v0.8.0.tar.gz --- rustc-1.19.0-src-orig/src/libcore/intrinsics.rs +++ rustc-1.19.0-src/src/libcore/intrinsics.rs @@ -678,5 +678,9 @@ pub fn min_align_of_val<T: ?Sized>(_: &T) -> usize; + /// Obtain the length of a slice pointer + #[cfg(rust_compiler="mrustc")] + pub fn mrustc_slice_len<T>(pointer: *const [T]) -> usize; + /// Gets a static string slice containing the name of a type. pub fn type_name<T: ?Sized>() -> &'static str; --- rustc-1.19.0-src-orig/src/libcore/slice/mod.rs +++ rustc-1.19.0-src/src/libcore/slice/mod.rs @@ -413,6 +413,8 @@ #[inline] fn len(&self) -> usize { - unsafe { - mem::transmute::<&[T], Repr<T>>(self).len - } + #[cfg(not(rust_compiler="mrustc"))] + let rv = unsafe { mem::transmute::<&[T], Repr<T>>(self).len }; + #[cfg(rust_compiler="mrustc")] + let rv = unsafe { ::intrinsics::mrustc_slice_len(self) }; + rv }