Skip to content

Commit

Permalink
Support: Avoid using SmallVector::set_size() in MemoryBuffer
Browse files Browse the repository at this point in the history
Update getMemoryBufferForStream() to use `resize_for_overwrite()` and
`truncate()` instead of `reserve()` and `set_size()`.

Differential Revision: https://reviews.llvm.org/D115384
  • Loading branch information
dexonsmith committed Dec 10, 2021
1 parent 925ec98 commit 1131738
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions llvm/lib/Support/MemoryBuffer.cpp
Expand Up @@ -227,17 +227,20 @@ static ErrorOr<std::unique_ptr<WritableMemoryBuffer>>
getMemoryBufferForStream(sys::fs::file_t FD, const Twine &BufferName) {
const ssize_t ChunkSize = 4096*4;
SmallString<ChunkSize> 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<size_t> 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);
}
Expand Down

0 comments on commit 1131738

Please sign in to comment.