diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-08-26 22:00:09 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-08-26 22:00:09 +0000 |
commit | e2c1d77fb41fd580d11c56cb1082eb505cfa1f18 (patch) | |
tree | 7bddf1234caf42b4bc4499106253242978683e38 /llvm/lib | |
parent | 0056256b5595e8d8d3af2c927749092825454faf (diff) | |
download | bcm5719-llvm-e2c1d77fb41fd580d11c56cb1082eb505cfa1f18.tar.gz bcm5719-llvm-e2c1d77fb41fd580d11c56cb1082eb505cfa1f18.zip |
Pass a std::unique_ptr<MemoryBuffer>& to getLazyBitcodeModule.
By taking a reference we can do the ownership transfer in one place instead of
expecting every caller to do it.
llvm-svn: 216492
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitReader.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 18 | ||||
-rw-r--r-- | llvm/lib/IRReader/IRReader.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/Object/IRObjectFile.cpp | 3 |
4 files changed, 15 insertions, 15 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitReader.cpp b/llvm/lib/Bitcode/Reader/BitReader.cpp index e21d29ac374..76a7e6ae159 100644 --- a/llvm/lib/Bitcode/Reader/BitReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitReader.cpp @@ -51,8 +51,11 @@ LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef, LLVMModuleRef *OutM, char **OutMessage) { std::string Message; + std::unique_ptr<MemoryBuffer> Owner(unwrap(MemBuf)); + ErrorOr<Module *> ModuleOrErr = - getLazyBitcodeModule(unwrap(MemBuf), *unwrap(ContextRef)); + getLazyBitcodeModule(Owner, *unwrap(ContextRef)); + Owner.release(); if (std::error_code EC = ModuleOrErr.getError()) { *OutM = wrap((Module *)nullptr); diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 8dc0aa32315..1b88e5f5fa5 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -3519,11 +3519,11 @@ const std::error_category &llvm::BitcodeErrorCategory() { /// /// \param[in] WillMaterializeAll Set to \c true if the caller promises to /// materialize everything -- in particular, if this isn't truly lazy. -static ErrorOr<Module *> getLazyBitcodeModuleImpl(MemoryBuffer *Buffer, - LLVMContext &Context, - bool WillMaterializeAll) { +static ErrorOr<Module *> +getLazyBitcodeModuleImpl(std::unique_ptr<MemoryBuffer> &Buffer, + LLVMContext &Context, bool WillMaterializeAll) { Module *M = new Module(Buffer->getBufferIdentifier(), Context); - BitcodeReader *R = new BitcodeReader(Buffer, Context); + BitcodeReader *R = new BitcodeReader(Buffer.get(), Context); M->setMaterializer(R); auto cleanupOnError = [&](std::error_code EC) { @@ -3540,11 +3540,13 @@ static ErrorOr<Module *> getLazyBitcodeModuleImpl(MemoryBuffer *Buffer, if (std::error_code EC = R->materializeForwardReferencedFunctions()) return cleanupOnError(EC); + Buffer.release(); // The BitcodeReader owns it now. return M; } -ErrorOr<Module *> llvm::getLazyBitcodeModule(MemoryBuffer *Buffer, - LLVMContext &Context) { +ErrorOr<Module *> +llvm::getLazyBitcodeModule(std::unique_ptr<MemoryBuffer> &Buffer, + LLVMContext &Context) { return getLazyBitcodeModuleImpl(Buffer, Context, false); } @@ -3567,11 +3569,9 @@ Module *llvm::getStreamedBitcodeModule(const std::string &name, ErrorOr<Module *> llvm::parseBitcodeFile(MemoryBufferRef Buffer, LLVMContext &Context) { std::unique_ptr<MemoryBuffer> Buf = MemoryBuffer::getMemBuffer(Buffer, false); - ErrorOr<Module *> ModuleOrErr = - getLazyBitcodeModuleImpl(Buf.get(), Context, true); + ErrorOr<Module *> ModuleOrErr = getLazyBitcodeModuleImpl(Buf, 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()) { diff --git a/llvm/lib/IRReader/IRReader.cpp b/llvm/lib/IRReader/IRReader.cpp index 5c3124821a7..a50e3865285 100644 --- a/llvm/lib/IRReader/IRReader.cpp +++ b/llvm/lib/IRReader/IRReader.cpp @@ -35,14 +35,12 @@ getLazyIRModule(std::unique_ptr<MemoryBuffer> Buffer, SMDiagnostic &Err, if (isBitcode((const unsigned char *)Buffer->getBufferStart(), (const unsigned char *)Buffer->getBufferEnd())) { std::string ErrMsg; - ErrorOr<Module *> ModuleOrErr = getLazyBitcodeModule(Buffer.get(), Context); + ErrorOr<Module *> ModuleOrErr = getLazyBitcodeModule(Buffer, Context); if (std::error_code EC = ModuleOrErr.getError()) { Err = SMDiagnostic(Buffer->getBufferIdentifier(), SourceMgr::DK_Error, EC.message()); return nullptr; } - // getLazyBitcodeModule takes ownership of the Buffer when successful. - Buffer.release(); return std::unique_ptr<Module>(ModuleOrErr.get()); } diff --git a/llvm/lib/Object/IRObjectFile.cpp b/llvm/lib/Object/IRObjectFile.cpp index 964c7ed691d..4c050d5badb 100644 --- a/llvm/lib/Object/IRObjectFile.cpp +++ b/llvm/lib/Object/IRObjectFile.cpp @@ -270,10 +270,9 @@ llvm::object::IRObjectFile::createIRObjectFile(MemoryBufferRef Object, std::unique_ptr<MemoryBuffer> Buff(MemoryBuffer::getMemBuffer(Object, false)); - ErrorOr<Module *> MOrErr = getLazyBitcodeModule(Buff.get(), Context); + ErrorOr<Module *> MOrErr = getLazyBitcodeModule(Buff, Context); if (std::error_code EC = MOrErr.getError()) return EC; - Buff.release(); std::unique_ptr<Module> M(MOrErr.get()); return new IRObjectFile(Object, std::move(M)); |