Pass a MemoryBufferRef when we can avoid taking ownership.

The attached patch simplifies a few interfaces that don't need to take
ownership of a buffer.

For example, both parseAssembly and parseBitcodeFile will parse the
entire buffer before returning. There is no need to take ownership.

Using a MemoryBufferRef makes it obvious in the type signature that
there is no ownership transfer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216488 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola
2014-08-26 21:49:01 +00:00
parent af07403c3e
commit 2292996e1a
16 changed files with 58 additions and 71 deletions

View File

@ -3564,15 +3564,17 @@ Module *llvm::getStreamedBitcodeModule(const std::string &name,
return M;
}
ErrorOr<Module *> llvm::parseBitcodeFile(MemoryBuffer *Buffer,
ErrorOr<Module *> llvm::parseBitcodeFile(MemoryBufferRef Buffer,
LLVMContext &Context) {
std::unique_ptr<MemoryBuffer> Buf = MemoryBuffer::getMemBuffer(Buffer, false);
ErrorOr<Module *> ModuleOrErr =
getLazyBitcodeModuleImpl(Buffer, Context, true);
getLazyBitcodeModuleImpl(Buf.get(), Context, true);
if (!ModuleOrErr)
return ModuleOrErr;
Buf.release(); // The BitcodeReader owns it now.
Module *M = ModuleOrErr.get();
// Read in the entire module, and destroy the BitcodeReader.
if (std::error_code EC = M->materializeAllPermanently(true)) {
if (std::error_code EC = M->materializeAllPermanently()) {
delete M;
return EC;
}
@ -3583,12 +3585,11 @@ ErrorOr<Module *> llvm::parseBitcodeFile(MemoryBuffer *Buffer,
return M;
}
std::string llvm::getBitcodeTargetTriple(MemoryBuffer *Buffer,
std::string llvm::getBitcodeTargetTriple(MemoryBufferRef Buffer,
LLVMContext &Context) {
BitcodeReader *R = new BitcodeReader(Buffer, Context);
std::unique_ptr<MemoryBuffer> Buf = MemoryBuffer::getMemBuffer(Buffer, false);
auto R = llvm::make_unique<BitcodeReader>(Buf.get(), Context);
ErrorOr<std::string> Triple = R->parseTriple();
R->releaseBuffer();
delete R;
if (Triple.getError())
return "";
return Triple.get();