diff options
-rw-r--r-- | llvm/include/llvm/Support/MemoryBuffer.h | 12 | ||||
-rw-r--r-- | llvm/lib/Object/WindowsResource.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/Support/MemoryBuffer.cpp | 15 | ||||
-rw-r--r-- | llvm/unittests/Support/MemoryBufferTest.cpp | 4 |
4 files changed, 23 insertions, 14 deletions
diff --git a/llvm/include/llvm/Support/MemoryBuffer.h b/llvm/include/llvm/Support/MemoryBuffer.h index 7b849fdb867..2534cf3eb65 100644 --- a/llvm/include/llvm/Support/MemoryBuffer.h +++ b/llvm/include/llvm/Support/MemoryBuffer.h @@ -117,9 +117,8 @@ public: static std::unique_ptr<MemoryBuffer> getMemBufferCopy(StringRef InputData, const Twine &BufferName = ""); - /// Allocate a new zero-initialized MemoryBuffer of the specified size. Note - /// that the caller need not initialize the memory allocated by this method. - /// The memory is owned by the MemoryBuffer object. + // TODO: Remove after all callers are switched to + // WritableMemoryBuffer::getNewMemBuffer static std::unique_ptr<MemoryBuffer> getNewMemBuffer(size_t Size, StringRef BufferName = ""); @@ -196,6 +195,12 @@ public: static std::unique_ptr<WritableMemoryBuffer> getNewUninitMemBuffer(size_t Size, const Twine &BufferName = ""); + /// Allocate a new zero-initialized MemoryBuffer of the specified size. Note + /// that the caller need not initialize the memory allocated by this method. + /// The memory is owned by the MemoryBuffer object. + static std::unique_ptr<WritableMemoryBuffer> + getNewMemBuffer(size_t Size, const Twine &BufferName = ""); + private: // Hide these base class factory function so one can't write // WritableMemoryBuffer::getXXX() @@ -204,7 +209,6 @@ private: using MemoryBuffer::getFileOrSTDIN; using MemoryBuffer::getMemBuffer; using MemoryBuffer::getMemBufferCopy; - using MemoryBuffer::getNewMemBuffer; using MemoryBuffer::getOpenFile; using MemoryBuffer::getOpenFileSlice; using MemoryBuffer::getSTDIN; diff --git a/llvm/lib/Object/WindowsResource.cpp b/llvm/lib/Object/WindowsResource.cpp index 271224ec631..1b7282f13db 100644 --- a/llvm/lib/Object/WindowsResource.cpp +++ b/llvm/lib/Object/WindowsResource.cpp @@ -334,7 +334,7 @@ private: void writeDirectoryTree(); void writeDirectoryStringTable(); void writeFirstSectionRelocations(); - std::unique_ptr<MemoryBuffer> OutputBuffer; + std::unique_ptr<WritableMemoryBuffer> OutputBuffer; char *BufferStart; uint64_t CurrentOffset = 0; COFF::MachineTypes MachineType; @@ -360,7 +360,7 @@ WindowsResourceCOFFWriter::WindowsResourceCOFFWriter( Data(Parser.getData()), StringTable(Parser.getStringTable()) { performFileLayout(); - OutputBuffer = MemoryBuffer::getNewMemBuffer(FileSize); + OutputBuffer = WritableMemoryBuffer::getNewMemBuffer(FileSize); } void WindowsResourceCOFFWriter::performFileLayout() { @@ -425,7 +425,7 @@ static std::time_t getTime() { } std::unique_ptr<MemoryBuffer> WindowsResourceCOFFWriter::write() { - BufferStart = const_cast<char *>(OutputBuffer->getBufferStart()); + BufferStart = OutputBuffer->getBufferStart(); writeCOFFHeader(); writeFirstSectionHeader(); diff --git a/llvm/lib/Support/MemoryBuffer.cpp b/llvm/lib/Support/MemoryBuffer.cpp index c709fc416df..834ca8cbfd8 100644 --- a/llvm/lib/Support/MemoryBuffer.cpp +++ b/llvm/lib/Support/MemoryBuffer.cpp @@ -141,11 +141,7 @@ MemoryBuffer::getMemBufferCopy(StringRef InputData, const Twine &BufferName) { std::unique_ptr<MemoryBuffer> MemoryBuffer::getNewMemBuffer(size_t Size, StringRef BufferName) { - auto SB = WritableMemoryBuffer::getNewUninitMemBuffer(Size, BufferName); - if (!SB) - return nullptr; - memset(SB->getBufferStart(), 0, Size); - return std::move(SB); + return WritableMemoryBuffer::getNewMemBuffer(Size, BufferName); } ErrorOr<std::unique_ptr<MemoryBuffer>> @@ -306,6 +302,15 @@ WritableMemoryBuffer::getNewUninitMemBuffer(size_t Size, const Twine &BufferName return std::unique_ptr<WritableMemoryBuffer>(Ret); } +std::unique_ptr<WritableMemoryBuffer> +WritableMemoryBuffer::getNewMemBuffer(size_t Size, const Twine &BufferName) { + auto SB = WritableMemoryBuffer::getNewUninitMemBuffer(Size, BufferName); + if (!SB) + return nullptr; + memset(SB->getBufferStart(), 0, Size); + return SB; +} + static bool shouldUseMmap(int FD, size_t FileSize, size_t MapSize, diff --git a/llvm/unittests/Support/MemoryBufferTest.cpp b/llvm/unittests/Support/MemoryBufferTest.cpp index 5e3c8db0279..64a7bb676f9 100644 --- a/llvm/unittests/Support/MemoryBufferTest.cpp +++ b/llvm/unittests/Support/MemoryBufferTest.cpp @@ -116,13 +116,13 @@ TEST_F(MemoryBufferTest, make_new) { EXPECT_TRUE(nullptr != Two.get()); // 0-initialized buffer with no name - OwningBuffer Three(MemoryBuffer::getNewMemBuffer(321, data)); + OwningBuffer Three(WritableMemoryBuffer::getNewMemBuffer(321, data)); EXPECT_TRUE(nullptr != Three.get()); for (size_t i = 0; i < 321; ++i) EXPECT_EQ(0, Three->getBufferStart()[0]); // 0-initialized buffer with name - OwningBuffer Four(MemoryBuffer::getNewMemBuffer(123, "zeros")); + OwningBuffer Four(WritableMemoryBuffer::getNewMemBuffer(123, "zeros")); EXPECT_TRUE(nullptr != Four.get()); for (size_t i = 0; i < 123; ++i) EXPECT_EQ(0, Four->getBufferStart()[0]); |