diff --git a/src/liballoc/vec.rs b/src/liballoc/vec.rs index c600a6b649f..aedb3724409 100644 --- a/src/liballoc/vec.rs +++ b/src/liballoc/vec.rs @@ -963,14 +963,15 @@ pub unsafe fn set_len(&mut self, new_len: usize) { #[inline] #[stable(feature = "rust1", since = "1.0.0")] pub fn swap_remove(&mut self, index: usize) -> T { - assert!(index < self.len); + let len = self.len(); + assert!(index < len); unsafe { // We replace self[index] with the last element. Note that if the // bounds check above succeeds there must be a last element (which // can be self[index] itself). - let last = ptr::read(self.as_ptr().add(self.len - 1)); + let last = ptr::read(self.as_ptr().add(len - 1)); let hole: *mut T = self.as_mut_ptr().add(index); - self.len -= 1; + self.set_len(len - 1); ptr::replace(hole, last) } }