]> git.lizzy.rs Git - rust.git/commitdiff
Use ptr::drop_in_place in Vec::truncate
authorUlrik Sverdrup <bluss@users.noreply.github.com>
Wed, 2 Mar 2016 16:48:50 +0000 (17:48 +0100)
committerUlrik Sverdrup <bluss@users.noreply.github.com>
Wed, 2 Mar 2016 17:05:40 +0000 (18:05 +0100)
src/libcollections/vec.rs

index e010c32f8eac08deaa1303ceca23e1844ea6338f..efcb5d2ceb3aa2c51a3f41649821f524ae3fdb42 100644 (file)
@@ -497,10 +497,11 @@ pub fn truncate(&mut self, len: usize) {
         unsafe {
             // drop any extra elements
             while len < self.len {
-                // decrement len before the read(), so a panic on Drop doesn't
-                // re-drop the just-failed value.
+                // decrement len before the drop_in_place(), so a panic on Drop
+                // doesn't re-drop the just-failed value.
                 self.len -= 1;
-                ptr::read(self.get_unchecked(self.len));
+                let len = self.len;
+                ptr::drop_in_place(self.get_unchecked_mut(len));
             }
         }
     }