diff --git a/llvm/include/llvm/Support/MemoryBuffer.h b/llvm/include/llvm/Support/MemoryBuffer.h index 4aeca0c5b641..d6ff69d50f59 100644 --- a/llvm/include/llvm/Support/MemoryBuffer.h +++ b/llvm/include/llvm/Support/MemoryBuffer.h @@ -152,6 +152,8 @@ class MemoryBufferRef { public: MemoryBufferRef() {} + MemoryBufferRef(MemoryBuffer& Buffer) + : Buffer(Buffer.getBuffer()), Identifier(Buffer.getBufferIdentifier()) {} MemoryBufferRef(StringRef Buffer, StringRef Identifier) : Buffer(Buffer), Identifier(Identifier) {} diff --git a/llvm/unittests/Support/MemoryBufferTest.cpp b/llvm/unittests/Support/MemoryBufferTest.cpp index ffb809aa207b..ffbd74dc4c03 100644 --- a/llvm/unittests/Support/MemoryBufferTest.cpp +++ b/llvm/unittests/Support/MemoryBufferTest.cpp @@ -170,6 +170,15 @@ TEST_F(MemoryBufferTest, getOpenFileReopened) { } +TEST_F(MemoryBufferTest, reference) { + OwningBuffer MB(MemoryBuffer::getMemBuffer(data)); + MemoryBufferRef MBR(*MB); + + EXPECT_EQ(MB->getBufferStart(), MBR.getBufferStart()); + EXPECT_EQ(MB->getBufferIdentifier(), MBR.getBufferIdentifier()); +} + + TEST_F(MemoryBufferTest, slice) { // Create a file that is six pages long with different data on each page. int FD;