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