diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs index 2f9577c08de..404c2fc8e8f 100644 --- a/src/libcollections/vec.rs +++ b/src/libcollections/vec.rs @@ -433,8 +433,10 @@ impl Vec { #[stable(feature = "rust1", since = "1.0.0")] pub fn as_mut_slice(&mut self) -> &mut [T] { unsafe { + let ptr = *self.ptr; + assume(!ptr.is_null()); mem::transmute(RawSlice { - data: *self.ptr, + data: ptr, len: self.len, }) } @@ -458,6 +460,7 @@ impl Vec { pub fn into_iter(self) -> IntoIter { unsafe { let ptr = *self.ptr; + assume(!ptr.is_null()); let cap = self.cap; let begin = ptr as *const T; let end = if mem::size_of::() == 0 { diff --git a/src/libcore/slice.rs b/src/libcore/slice.rs index a86da53b372..6774906516a 100644 --- a/src/libcore/slice.rs +++ b/src/libcore/slice.rs @@ -40,6 +40,7 @@ use cmp::{Ordering, PartialEq, PartialOrd, Eq, Ord}; use cmp::Ordering::{Less, Equal, Greater}; use cmp; use default::Default; +use intrinsics::assume; use iter::*; use ops::{FnMut, self, Index}; use ops::RangeFull; @@ -137,6 +138,7 @@ impl SliceExt for [T] { fn iter<'a>(&'a self) -> Iter<'a, T> { unsafe { let p = self.as_ptr(); + assume(!p.is_null()); if mem::size_of::() == 0 { Iter {ptr: p, end: (p as usize + self.len()) as *const T, @@ -276,6 +278,7 @@ impl SliceExt for [T] { fn iter_mut<'a>(&'a mut self) -> IterMut<'a, T> { unsafe { let p = self.as_mut_ptr(); + assume(!p.is_null()); if mem::size_of::() == 0 { IterMut {ptr: p, end: (p as usize + self.len()) as *mut T,