diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2016-11-08 04:17:11 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2016-11-08 04:17:11 +0000 |
commit | 77c89b6958f51a0b26c4849d37a200c1bc0319df (patch) | |
tree | 7ac81d7f4f32b81635db74539ad07fdbd1a6c535 /clang/lib/Frontend/SerializedDiagnosticReader.cpp | |
parent | 939c7d916e1631cf2a005b4ba6c03726ecbe0f85 (diff) | |
download | bcm5719-llvm-77c89b6958f51a0b26c4849d37a200c1bc0319df.tar.gz bcm5719-llvm-77c89b6958f51a0b26c4849d37a200c1bc0319df.zip |
Bitcode: Decouple block info block state from reader.
As proposed on llvm-dev:
http://lists.llvm.org/pipermail/llvm-dev/2016-October/106630.html
Move block info block state to a new class, BitstreamBlockInfo.
Clients may set the block info for a particular cursor with the
BitstreamCursor::setBlockInfo() method.
At this point BitstreamReader is not much more than a container for an
ArrayRef<uint8_t>, so remove it and replace all uses with direct uses
of memory buffers.
Differential Revision: https://reviews.llvm.org/D26259
llvm-svn: 286207
Diffstat (limited to 'clang/lib/Frontend/SerializedDiagnosticReader.cpp')
-rw-r--r-- | clang/lib/Frontend/SerializedDiagnosticReader.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/clang/lib/Frontend/SerializedDiagnosticReader.cpp b/clang/lib/Frontend/SerializedDiagnosticReader.cpp index aefd0f8fbb0..c4461d452e7 100644 --- a/clang/lib/Frontend/SerializedDiagnosticReader.cpp +++ b/clang/lib/Frontend/SerializedDiagnosticReader.cpp @@ -24,8 +24,8 @@ std::error_code SerializedDiagnosticReader::readDiagnostics(StringRef File) { if (!Buffer) return SDError::CouldNotLoad; - llvm::BitstreamReader StreamFile(**Buffer); - llvm::BitstreamCursor Stream(StreamFile); + llvm::BitstreamCursor Stream(**Buffer); + Optional<llvm::BitstreamBlockInfo> BlockInfo; // Sniff for the signature. if (Stream.Read(8) != 'D' || @@ -41,10 +41,13 @@ std::error_code SerializedDiagnosticReader::readDiagnostics(StringRef File) { std::error_code EC; switch (Stream.ReadSubBlockID()) { - case llvm::bitc::BLOCKINFO_BLOCK_ID: - if (Stream.ReadBlockInfoBlock()) + case llvm::bitc::BLOCKINFO_BLOCK_ID: { + BlockInfo = Stream.ReadBlockInfoBlock(); + if (!BlockInfo) return SDError::MalformedBlockInfoBlock; + Stream.setBlockInfo(&*BlockInfo); continue; + } case BLOCK_META: if ((EC = readMetaBlock(Stream))) return EC; |