mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 18:24:00 +00:00
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:
@ -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();
|
||||
|
Reference in New Issue
Block a user