diff --git a/src/libcore/slice.rs b/src/libcore/slice.rs index 9db1ceddf0d75..546e0bc806e12 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::() != 0 { - ::intrinsics::assume(!self.ptr.is_null()); - ::intrinsics::assume(!self.end.is_null()); - } + unsafe { + if mem::size_of::() != 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::() != 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::() != 0 { - ::intrinsics::assume(!self.ptr.is_null()); - ::intrinsics::assume(!self.end.is_null()); - } Some(slice_ref!(self.end)) } }