diff --git a/llvm/lib/Support/MemoryBuffer.cpp b/llvm/lib/Support/MemoryBuffer.cpp --- a/llvm/lib/Support/MemoryBuffer.cpp +++ b/llvm/lib/Support/MemoryBuffer.cpp @@ -227,17 +227,20 @@ getMemoryBufferForStream(sys::fs::file_t FD, const Twine &BufferName) { const ssize_t ChunkSize = 4096*4; SmallString Buffer; + // Read into Buffer until we hit EOF. + size_t Size = Buffer.size(); for (;;) { - Buffer.reserve(Buffer.size() + ChunkSize); + Buffer.resize_for_overwrite(Size + ChunkSize); Expected ReadBytes = sys::fs::readNativeFile( - FD, makeMutableArrayRef(Buffer.end(), ChunkSize)); + FD, makeMutableArrayRef(Buffer.begin() + Size, ChunkSize)); if (!ReadBytes) return errorToErrorCode(ReadBytes.takeError()); if (*ReadBytes == 0) break; - Buffer.set_size(Buffer.size() + *ReadBytes); + Size += *ReadBytes; } + Buffer.truncate(Size); return getMemBufferCopyImpl(Buffer, BufferName); }