diff options
| -rw-r--r-- | src/libcore/slice.rs | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/src/libcore/slice.rs b/src/libcore/slice.rs index 9db1ceddf0d..546e0bc806e 100644 --- a/src/libcore/slice.rs +++ b/src/libcore/slice.rs @@ -665,14 +665,14 @@ macro_rules! iterator { #[inline] fn next(&mut self) -> Option<$elem> { // could be implemented with slices, but this avoids bounds checks - if self.ptr == self.end { - None - } else { - unsafe { - if mem::size_of::<T>() != 0 { - ::intrinsics::assume(!self.ptr.is_null()); - ::intrinsics::assume(!self.end.is_null()); - } + unsafe { + if mem::size_of::<T>() != 0 { + assume(!self.ptr.is_null()); + assume(!self.end.is_null()); + } + if self.ptr == self.end { + None + } else { let old = self.ptr; self.ptr = slice_offset!(self.ptr, 1); Some(slice_ref!(old)) @@ -710,15 +710,15 @@ macro_rules! iterator { #[inline] fn next_back(&mut self) -> Option<$elem> { // could be implemented with slices, but this avoids bounds checks - if self.end == self.ptr { - None - } else { - unsafe { + unsafe { + if mem::size_of::<T>() != 0 { + assume(!self.ptr.is_null()); + assume(!self.end.is_null()); + } + if self.end == self.ptr { + None + } else { self.end = slice_offset!(self.end, -1); - if mem::size_of::<T>() != 0 { - ::intrinsics::assume(!self.ptr.is_null()); - ::intrinsics::assume(!self.end.is_null()); - } Some(slice_ref!(self.end)) } } |
