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/Bitcode/Reader/BitcodeReader.cpp | |
parent | 0056256b5595e8d8d3af2c927749092825454faf (diff) | |
download | llvm-e2c1d77fb41fd580d11c56cb1082eb505cfa1f18.zip llvm-e2c1d77fb41fd580d11c56cb1082eb505cfa1f18.tar.gz llvm-e2c1d77fb41fd580d11c56cb1082eb505cfa1f18.tar.bz2 |
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/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 8dc0aa3..1b88e5f 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()) { |