From d15bca6859f7cb9d455ec89809a9b04a7d195c6d Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 18 Dec 2014 05:08:43 +0000 Subject: [PATCH] Modernize the getStreamedBitcodeModule interface a bit. NFC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224499 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Bitcode/BitstreamReader.h | 5 ++-- include/llvm/Bitcode/ReaderWriter.h | 13 ++++------- lib/Bitcode/Reader/BitcodeReader.cpp | 32 +++++++++++--------------- tools/llvm-dis/llvm-dis.cpp | 12 ++++++---- 4 files changed, 29 insertions(+), 33 deletions(-) diff --git a/include/llvm/Bitcode/BitstreamReader.h b/include/llvm/Bitcode/BitstreamReader.h index ecf82352779..865a3e66842 100644 --- a/include/llvm/Bitcode/BitstreamReader.h +++ b/include/llvm/Bitcode/BitstreamReader.h @@ -61,9 +61,8 @@ public: init(Start, End); } - BitstreamReader(MemoryObject *bytes) : IgnoreBlockInfoNames(true) { - BitcodeBytes.reset(bytes); - } + BitstreamReader(std::unique_ptr BitcodeBytes) + : BitcodeBytes(std::move(BitcodeBytes)), IgnoreBlockInfoNames(true) {} BitstreamReader(BitstreamReader &&Other) { *this = std::move(Other); diff --git a/include/llvm/Bitcode/ReaderWriter.h b/include/llvm/Bitcode/ReaderWriter.h index 2e8cdc737ed..9a30fb4fdca 100644 --- a/include/llvm/Bitcode/ReaderWriter.h +++ b/include/llvm/Bitcode/ReaderWriter.h @@ -33,14 +33,11 @@ namespace llvm { ErrorOr getLazyBitcodeModule(std::unique_ptr &&Buffer, LLVMContext &Context); - /// getStreamedBitcodeModule - Read the header of the specified stream - /// and prepare for lazy deserialization and streaming of function bodies. - /// On error, this returns null, and fills in *ErrMsg with an error - /// description if ErrMsg is non-null. - Module *getStreamedBitcodeModule(const std::string &name, - DataStreamer *streamer, - LLVMContext &Context, - std::string *ErrMsg = nullptr); + /// Read the header of the specified stream and prepare for lazy + /// deserialization and streaming of function bodies. + ErrorOr> + getStreamedBitcodeModule(StringRef Name, DataStreamer *Streamer, + LLVMContext &Context); /// Read the header of the specified bitcode buffer and extract just the /// triple information. If successful, this returns a string. On error, this diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp index 78002d61168..d4a2c1a298c 100644 --- a/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/lib/Bitcode/Reader/BitcodeReader.cpp @@ -3529,12 +3529,13 @@ std::error_code BitcodeReader::InitStreamFromBuffer() { std::error_code BitcodeReader::InitLazyStream() { // Check and strip off the bitcode wrapper; BitstreamReader expects never to // see it. - StreamingMemoryObject *Bytes = new StreamingMemoryObject(LazyStreamer); - StreamFile.reset(new BitstreamReader(Bytes)); + auto OwnedBytes = make_unique(LazyStreamer); + StreamingMemoryObject &Bytes = *OwnedBytes; + StreamFile = make_unique(std::move(OwnedBytes)); Stream.init(&*StreamFile); unsigned char buf[16]; - if (Bytes->readBytes(buf, 16, 0) != 16) + if (Bytes.readBytes(buf, 16, 0) != 16) return Error(BitcodeError::InvalidBitcodeSignature); if (!isBitcode(buf, buf + 16)) @@ -3544,8 +3545,8 @@ std::error_code BitcodeReader::InitLazyStream() { const unsigned char *bitcodeStart = buf; const unsigned char *bitcodeEnd = buf + 16; SkipBitcodeWrapperHeader(bitcodeStart, bitcodeEnd, false); - Bytes->dropLeadingBytes(bitcodeStart - buf); - Bytes->setKnownObjectSize(bitcodeEnd - bitcodeStart); + Bytes.dropLeadingBytes(bitcodeStart - buf); + Bytes.setKnownObjectSize(bitcodeEnd - bitcodeStart); } return std::error_code(); } @@ -3651,20 +3652,15 @@ llvm::getLazyBitcodeModule(std::unique_ptr &&Buffer, return getLazyBitcodeModuleImpl(std::move(Buffer), Context, false); } -Module *llvm::getStreamedBitcodeModule(const std::string &name, - DataStreamer *streamer, - LLVMContext &Context, - std::string *ErrMsg) { - Module *M = new Module(name, Context); - BitcodeReader *R = new BitcodeReader(streamer, Context); +ErrorOr> +llvm::getStreamedBitcodeModule(StringRef Name, DataStreamer *Streamer, + LLVMContext &Context) { + std::unique_ptr M = make_unique(Name, Context); + BitcodeReader *R = new BitcodeReader(Streamer, Context); M->setMaterializer(R); - if (std::error_code EC = R->ParseBitcodeInto(M)) { - if (ErrMsg) - *ErrMsg = EC.message(); - delete M; // Also deletes R. - return nullptr; - } - return M; + if (std::error_code EC = R->ParseBitcodeInto(M.get())) + return EC; + return std::move(M); } ErrorOr llvm::parseBitcodeFile(MemoryBufferRef Buffer, diff --git a/tools/llvm-dis/llvm-dis.cpp b/tools/llvm-dis/llvm-dis.cpp index fb737173761..072f6369e12 100644 --- a/tools/llvm-dis/llvm-dis.cpp +++ b/tools/llvm-dis/llvm-dis.cpp @@ -127,15 +127,19 @@ int main(int argc, char **argv) { std::unique_ptr M; // Use the bitcode streaming interface - DataStreamer *streamer = getDataFileStreamer(InputFilename, &ErrorMessage); - if (streamer) { + DataStreamer *Streamer = getDataFileStreamer(InputFilename, &ErrorMessage); + if (Streamer) { std::string DisplayFilename; if (InputFilename == "-") DisplayFilename = ""; else DisplayFilename = InputFilename; - M.reset(getStreamedBitcodeModule(DisplayFilename, streamer, Context, - &ErrorMessage)); + ErrorOr> MOrErr = + getStreamedBitcodeModule(DisplayFilename, Streamer, Context); + if (std::error_code EC = MOrErr.getError()) + ErrorMessage = EC.message(); + else + M = std::move(*MOrErr); if(M.get()) { if (std::error_code EC = M->materializeAllPermanently()) { ErrorMessage = EC.message(); -- 2.34.1