diff --git a/src/liballoc/vec.rs b/src/liballoc/vec.rs index f5f8d88829f5f..fd59c99e258dd 100644 --- a/src/liballoc/vec.rs +++ b/src/liballoc/vec.rs @@ -2119,7 +2119,7 @@ where } impl Vec { - fn extend_desugared>(&mut self, mut iterator: I) { + fn extend_desugared>(&mut self, iterator: I) { // This is the case for a general iterator. // // This function should be the moral equivalent of: @@ -2127,18 +2127,10 @@ impl Vec { // for item in iterator { // self.push(item); // } - while let Some(element) = iterator.next() { - let len = self.len(); - if len == self.capacity() { - let (lower, _) = iterator.size_hint(); - self.reserve(lower.saturating_add(1)); - } - unsafe { - ptr::write(self.get_unchecked_mut(len), element); - // NB can't overflow since we would have had to alloc the address space - self.set_len(len + 1); - } - } + let (lower, _) = iterator.size_hint(); + self.reserve(lower); + + iterator.for_each(|element| self.push(element)); } /// Creates a splicing iterator that replaces the specified range in the vector