]> git.lizzy.rs Git - rust.git/commitdiff
Eliminate more excessive null-checks from slice iterators
authorBjörn Steinbrink <bsteinbr@gmail.com>
Mon, 2 Feb 2015 18:25:44 +0000 (19:25 +0100)
committerBjörn Steinbrink <bsteinbr@gmail.com>
Sun, 22 Feb 2015 13:26:49 +0000 (14:26 +0100)
This adds the assume() calls back that got lost when rebasing #21886.

src/libcollections/vec.rs
src/libcore/slice.rs

index 2f9577c08deba502cda273242582f08568e28af7..404c2fc8e8f3fe555968ee023b0226e935806bfb 100644 (file)
@@ -433,8 +433,10 @@ pub fn truncate(&mut self, len: usize) {
     #[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 @@ pub fn as_mut_slice(&mut self) -> &mut [T] {
     pub fn into_iter(self) -> IntoIter<T> {
         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::<T>() == 0 {
index a86da53b372a9bfc2b14969f445fc7ad1be40465..6774906516ad01f8db7f6c96766397e04e9ea2e5 100644 (file)
@@ -40,6 +40,7 @@
 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 @@ fn split_at(&self, mid: usize) -> (&[T], &[T]) {
     fn iter<'a>(&'a self) -> Iter<'a, T> {
         unsafe {
             let p = self.as_ptr();
+            assume(!p.is_null());
             if mem::size_of::<T>() == 0 {
                 Iter {ptr: p,
                       end: (p as usize + self.len()) as *const T,
@@ -276,6 +278,7 @@ fn split_at_mut(&mut self, mid: usize) -> (&mut [T], &mut [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::<T>() == 0 {
                 IterMut {ptr: p,
                          end: (p as usize + self.len()) as *mut T,