about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2018-07-19 12:41:10 +0200
committerRalf Jung <post@ralfj.de>2018-08-02 00:33:03 +0200
commit1b3c6bac8b91d881b2e8b9cb6ea35a8a13c1f804 (patch)
treebb9463337b90b8a6e86f2b832e00cceb910701a9
parent60b06369eea523b9d8fe606357177f126bef4b42 (diff)
downloadrust-1b3c6bac8b91d881b2e8b9cb6ea35a8a13c1f804.tar.gz
rust-1b3c6bac8b91d881b2e8b9cb6ea35a8a13c1f804.zip
make the code for nth closer to what it used to be
-rw-r--r--src/libcore/slice/mod.rs7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/libcore/slice/mod.rs b/src/libcore/slice/mod.rs
index 5250f1e432d..ec0f9317578 100644
--- a/src/libcore/slice/mod.rs
+++ b/src/libcore/slice/mod.rs
@@ -2382,11 +2382,12 @@ macro_rules! iterator {
         impl<'a, T> ExactSizeIterator for $name<'a, T> {
             #[inline(always)]
             fn len(&self) -> usize {
+                let diff = (self.end as usize).wrapping_sub(self.ptr as usize);
                 if mem::size_of::<T>() == 0 {
-                    // end is really ptr+len
-                    (self.end as usize).wrapping_sub(self.ptr as usize)
+                    // end is really ptr+len, so we are already done
+                    diff
                 } else {
-                    unsafe { self.end.offset_from(self.ptr) as usize }
+                    diff / mem::size_of::<T>()
                 }
             }