From e4573286a685e478fc14b4a4399c092e0bc553c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Steinbrink?= Date: Mon, 2 Feb 2015 19:25:44 +0100 Subject: [PATCH] Eliminate more excessive null-checks from slice iterators This adds the assume() calls back that got lost when rebasing #21886. --- src/libcollections/vec.rs | 5 ++++- src/libcore/slice.rs | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs index 2f9577c08deba..404c2fc8e8f3f 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 a86da53b372a9..6774906516ad0 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,