diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp index b8a1537ae8a..d156826144a 100644 --- a/lib/Support/raw_ostream.cpp +++ b/lib/Support/raw_ostream.cpp @@ -729,26 +729,17 @@ void raw_svector_ostream::resync() { } void raw_svector_ostream::write_impl(const char *Ptr, size_t Size) { - size_t NewSize = OS.size() + Size; - size_t NewReservation = NewSize + 64; - - bool NoOverlap = Ptr + Size < OS.begin() || Ptr > OS.begin() + OS.capacity(); - - if (NoOverlap) { - assert(!GetNumBytesInBuffer()); - OS.reserve(NewReservation); - memcpy(OS.end(), Ptr, Size); - OS.set_size(NewSize); - } else if (Ptr == OS.end()) { + if (Ptr == OS.end()) { // Grow the buffer to include the scratch area without copying. + size_t NewSize = OS.size() + Size; assert(NewSize <= OS.capacity() && "Invalid write_impl() call!"); OS.set_size(NewSize); - OS.reserve(NewReservation); } else { + assert(!GetNumBytesInBuffer()); OS.append(Ptr, Ptr + Size); - OS.reserve(NewReservation); } + OS.reserve(OS.size() + 64); SetBuffer(OS.end(), OS.capacity() - OS.size()); }