Skip to content

Commit 46d684f

Browse files
compnerdbob-wilson
authored andcommitted
remove usage of BitstreamReader
LLVM SVN r286207 removed the BitstreamReader interface. Remove the usage of the type, updating the cursor constructor accordingly.
1 parent 4cced9b commit 46d684f

File tree

5 files changed

+51
-69
lines changed

5 files changed

+51
-69
lines changed

include/swift/Serialization/ModuleFile.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,6 @@ class ModuleFile : public LazyMemberLoader {
5656
std::unique_ptr<llvm::MemoryBuffer> ModuleInputBuffer;
5757
std::unique_ptr<llvm::MemoryBuffer> ModuleDocInputBuffer;
5858

59-
/// The reader attached to \c ModuleInputBuffer.
60-
llvm::BitstreamReader ModuleInputReader;
61-
62-
/// The reader attached to \c ModuleDocInputBuffer.
63-
llvm::BitstreamReader ModuleDocInputReader;
64-
6559
/// The cursor used to lazily load things from the file.
6660
llvm::BitstreamCursor DeclTypeCursor;
6761

lib/IRGen/IRGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#include "swift/LLVMPasses/Passes.h"
3131
#include "clang/Basic/TargetInfo.h"
3232
#include "llvm/Bitcode/BitcodeWriterPass.h"
33-
#include "llvm/Bitcode/ReaderWriter.h"
33+
#include "llvm/Bitcode/BitcodeWriter.h"
3434
#include "llvm/CodeGen/BasicTTIImpl.h"
3535
#include "llvm/IR/Constants.h"
3636
#include "llvm/IR/DataLayout.h"

lib/Serialization/DeserializeSIL.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ SILDeserializer::SILDeserializer(ModuleFile *MF, SILModule &M,
105105
SILCursor = MF->getSILCursor();
106106
SILIndexCursor = MF->getSILIndexCursor();
107107
// Early return if either sil block or sil index block does not exist.
108-
if (!SILCursor.getBitStreamReader() || !SILIndexCursor.getBitStreamReader())
108+
if (SILCursor.AtEndOfStream() || SILIndexCursor.AtEndOfStream())
109109
return;
110110

111111
// Load any abbrev records at the start of the block.

lib/Serialization/ModuleFile.cpp

Lines changed: 48 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ static bool enterTopLevelModuleBlock(llvm::BitstreamCursor &cursor,
5555

5656
if (next.ID == llvm::bitc::BLOCKINFO_BLOCK_ID) {
5757
if (shouldReadBlockInfo) {
58-
if (cursor.ReadBlockInfoBlock())
58+
if (!cursor.ReadBlockInfoBlock())
5959
return false;
6060
} else {
6161
if (cursor.SkipBlock())
@@ -77,23 +77,25 @@ static bool enterTopLevelModuleBlock(llvm::BitstreamCursor &cursor,
7777
static bool readOptionsBlock(llvm::BitstreamCursor &cursor,
7878
SmallVectorImpl<uint64_t> &scratch,
7979
ExtendedValidationInfo &extendedInfo) {
80-
auto next = cursor.advance();
81-
while (next.Kind != llvm::BitstreamEntry::EndBlock) {
82-
if (next.Kind == llvm::BitstreamEntry::Error)
80+
while (!cursor.AtEndOfStream()) {
81+
auto entry = cursor.advance();
82+
if (entry.Kind == llvm::BitstreamEntry::EndBlock)
83+
break;
84+
85+
if (entry.Kind == llvm::BitstreamEntry::Error)
8386
return false;
8487

85-
if (next.Kind == llvm::BitstreamEntry::SubBlock) {
88+
if (entry.Kind == llvm::BitstreamEntry::SubBlock) {
8689
// Unknown metadata sub-block, possibly for use by a future version of
8790
// the module format.
8891
if (cursor.SkipBlock())
8992
return false;
90-
next = cursor.advance();
9193
continue;
9294
}
9395

9496
scratch.clear();
9597
StringRef blobData;
96-
unsigned kind = cursor.readRecord(next.ID, scratch, &blobData);
98+
unsigned kind = cursor.readRecord(entry.ID, scratch, &blobData);
9799
switch (kind) {
98100
case options_block::SDK_PATH:
99101
extendedInfo.setSDKPath(blobData);
@@ -119,8 +121,6 @@ static bool readOptionsBlock(llvm::BitstreamCursor &cursor,
119121
// module format.
120122
break;
121123
}
122-
123-
next = cursor.advance();
124124
}
125125

126126
return true;
@@ -135,15 +135,18 @@ validateControlBlock(llvm::BitstreamCursor &cursor,
135135
ValidationInfo result;
136136
bool versionSeen = false;
137137

138-
auto next = cursor.advance();
139-
while (next.Kind != llvm::BitstreamEntry::EndBlock) {
140-
if (next.Kind == llvm::BitstreamEntry::Error) {
138+
while (!cursor.AtEndOfStream()) {
139+
auto entry = cursor.advance();
140+
if (entry.Kind == llvm::BitstreamEntry::EndBlock)
141+
break;
142+
143+
if (entry.Kind == llvm::BitstreamEntry::Error) {
141144
result.status = Status::Malformed;
142145
return result;
143146
}
144147

145-
if (next.Kind == llvm::BitstreamEntry::SubBlock) {
146-
if (next.ID == OPTIONS_BLOCK_ID && extendedInfo) {
148+
if (entry.Kind == llvm::BitstreamEntry::SubBlock) {
149+
if (entry.ID == OPTIONS_BLOCK_ID && extendedInfo) {
147150
cursor.EnterSubBlock(OPTIONS_BLOCK_ID);
148151
if (!readOptionsBlock(cursor, scratch, *extendedInfo)) {
149152
result.status = Status::Malformed;
@@ -157,13 +160,12 @@ validateControlBlock(llvm::BitstreamCursor &cursor,
157160
return result;
158161
}
159162
}
160-
next = cursor.advance();
161163
continue;
162164
}
163165

164166
scratch.clear();
165167
StringRef blobData;
166-
unsigned kind = cursor.readRecord(next.ID, scratch, &blobData);
168+
unsigned kind = cursor.readRecord(entry.ID, scratch, &blobData);
167169
switch (kind) {
168170
case control_block::METADATA: {
169171
if (versionSeen) {
@@ -209,8 +211,6 @@ validateControlBlock(llvm::BitstreamCursor &cursor,
209211
// module format.
210212
break;
211213
}
212-
213-
next = cursor.advance();
214214
}
215215

216216
return result;
@@ -232,31 +232,31 @@ ValidationInfo serialization::validateSerializedAST(
232232
reinterpret_cast<uintptr_t>(data.data()) % 4 != 0)
233233
return result;
234234

235-
llvm::BitstreamReader reader(reinterpret_cast<const uint8_t *>(data.begin()),
236-
reinterpret_cast<const uint8_t *>(data.end()));
237-
llvm::BitstreamCursor cursor(reader);
235+
llvm::BitstreamCursor cursor(data);
238236
SmallVector<uint64_t, 32> scratch;
239237

240238
if (!checkModuleSignature(cursor) ||
241239
!enterTopLevelModuleBlock(cursor, MODULE_BLOCK_ID, false))
242240
return result;
243241

244-
auto topLevelEntry = cursor.advance();
245-
while (topLevelEntry.Kind == llvm::BitstreamEntry::SubBlock) {
242+
llvm::BitstreamEntry topLevelEntry;
243+
244+
while (!cursor.AtEndOfStream()) {
245+
topLevelEntry = cursor.advance();
246+
if (topLevelEntry.Kind != llvm::BitstreamEntry::SubBlock)
247+
break;
248+
246249
if (topLevelEntry.ID == CONTROL_BLOCK_ID) {
247250
cursor.EnterSubBlock(CONTROL_BLOCK_ID);
248251
result = validateControlBlock(cursor, scratch, extendedInfo);
249252
if (result.status == Status::Malformed)
250253
return result;
251-
252254
} else {
253255
if (cursor.SkipBlock()) {
254256
result.status = Status::Malformed;
255257
return result;
256258
}
257259
}
258-
259-
topLevelEntry = cursor.advance(AF_DontPopBlockAtEnd);
260260
}
261261

262262
if (topLevelEntry.Kind == llvm::BitstreamEntry::EndBlock) {
@@ -466,9 +466,9 @@ bool ModuleFile::readIndexBlock(llvm::BitstreamCursor &cursor) {
466466
SmallVector<uint64_t, 4> scratch;
467467
StringRef blobData;
468468

469-
while (true) {
470-
auto next = cursor.advance();
471-
switch (next.Kind) {
469+
while (!cursor.AtEndOfStream()) {
470+
auto entry = cursor.advance();
471+
switch (entry.Kind) {
472472
case llvm::BitstreamEntry::EndBlock:
473473
return true;
474474

@@ -484,7 +484,7 @@ bool ModuleFile::readIndexBlock(llvm::BitstreamCursor &cursor) {
484484
case llvm::BitstreamEntry::Record:
485485
scratch.clear();
486486
blobData = {};
487-
unsigned kind = cursor.readRecord(next.ID, scratch, &blobData);
487+
unsigned kind = cursor.readRecord(entry.ID, scratch, &blobData);
488488

489489
switch (kind) {
490490
case index_block::DECL_OFFSETS:
@@ -648,9 +648,9 @@ bool ModuleFile::readCommentBlock(llvm::BitstreamCursor &cursor) {
648648
SmallVector<uint64_t, 4> scratch;
649649
StringRef blobData;
650650

651-
while (true) {
652-
auto next = cursor.advance();
653-
switch (next.Kind) {
651+
while (!cursor.AtEndOfStream()) {
652+
auto entry = cursor.advance();
653+
switch (entry.Kind) {
654654
case llvm::BitstreamEntry::EndBlock:
655655
return true;
656656

@@ -665,7 +665,7 @@ bool ModuleFile::readCommentBlock(llvm::BitstreamCursor &cursor) {
665665

666666
case llvm::BitstreamEntry::Record:
667667
scratch.clear();
668-
unsigned kind = cursor.readRecord(next.ID, scratch, &blobData);
668+
unsigned kind = cursor.readRecord(entry.ID, scratch, &blobData);
669669

670670
switch (kind) {
671671
case comment_block::DECL_COMMENTS:
@@ -699,18 +699,6 @@ static Optional<swift::LibraryKind> getActualLibraryKind(unsigned rawKind) {
699699
return None;
700700
}
701701

702-
static const uint8_t *getStartBytePtr(llvm::MemoryBuffer *buffer) {
703-
if (!buffer)
704-
return nullptr;
705-
return reinterpret_cast<const uint8_t *>(buffer->getBufferStart());
706-
}
707-
708-
static const uint8_t *getEndBytePtr(llvm::MemoryBuffer *buffer) {
709-
if (!buffer)
710-
return nullptr;
711-
return reinterpret_cast<const uint8_t *>(buffer->getBufferEnd());
712-
}
713-
714702
static bool areCompatibleArchitectures(const llvm::Triple &moduleTarget,
715703
const llvm::Triple &ctxTarget) {
716704
if (moduleTarget.getArch() == ctxTarget.getArch())
@@ -764,17 +752,13 @@ ModuleFile::ModuleFile(
764752
serialization::ExtendedValidationInfo *extInfo)
765753
: ModuleInputBuffer(std::move(moduleInputBuffer)),
766754
ModuleDocInputBuffer(std::move(moduleDocInputBuffer)),
767-
ModuleInputReader(getStartBytePtr(this->ModuleInputBuffer.get()),
768-
getEndBytePtr(this->ModuleInputBuffer.get())),
769-
ModuleDocInputReader(getStartBytePtr(this->ModuleDocInputBuffer.get()),
770-
getEndBytePtr(this->ModuleDocInputBuffer.get())),
771755
DeserializedTypeCallback([](Type ty) {}) {
772756
assert(getStatus() == Status::Valid);
773757
Bits.IsFramework = isFramework;
774758

775759
PrettyModuleFileDeserialization stackEntry(*this);
776760

777-
llvm::BitstreamCursor cursor{ModuleInputReader};
761+
llvm::BitstreamCursor cursor{ModuleInputBuffer->getMemBufferRef()};
778762

779763
if (!checkModuleSignature(cursor) ||
780764
!enterTopLevelModuleBlock(cursor, MODULE_BLOCK_ID)) {
@@ -787,8 +771,13 @@ ModuleFile::ModuleFile(
787771
bool hasValidControlBlock = false;
788772
SmallVector<uint64_t, 64> scratch;
789773

790-
auto topLevelEntry = cursor.advance();
791-
while (topLevelEntry.Kind == llvm::BitstreamEntry::SubBlock) {
774+
llvm::BitstreamEntry topLevelEntry;
775+
776+
while (!cursor.AtEndOfStream()) {
777+
topLevelEntry = cursor.advance();
778+
if (topLevelEntry.Kind != llvm::BitstreamEntry::SubBlock)
779+
break;
780+
792781
switch (topLevelEntry.ID) {
793782
case CONTROL_BLOCK_ID: {
794783
cursor.EnterSubBlock(CONTROL_BLOCK_ID);
@@ -996,15 +985,18 @@ ModuleFile::ModuleFile(
996985
if (!this->ModuleDocInputBuffer)
997986
return;
998987

999-
llvm::BitstreamCursor docCursor{ModuleDocInputReader};
988+
llvm::BitstreamCursor docCursor{ModuleDocInputBuffer->getMemBufferRef()};
1000989
if (!checkModuleDocSignature(docCursor) ||
1001990
!enterTopLevelModuleBlock(docCursor, MODULE_DOC_BLOCK_ID)) {
1002991
error(Status::MalformedDocumentation);
1003992
return;
1004993
}
1005994

1006-
topLevelEntry = docCursor.advance();
1007-
while (topLevelEntry.Kind == llvm::BitstreamEntry::SubBlock) {
995+
while (!docCursor.AtEndOfStream()) {
996+
topLevelEntry = docCursor.advance();
997+
if (topLevelEntry.Kind != llvm::BitstreamEntry::SubBlock)
998+
break;
999+
10081000
switch (topLevelEntry.ID) {
10091001
case COMMENT_BLOCK_ID: {
10101002
if (!hasValidControlBlock || !readCommentBlock(docCursor)) {
@@ -1023,8 +1015,6 @@ ModuleFile::ModuleFile(
10231015
}
10241016
break;
10251017
}
1026-
1027-
topLevelEntry = docCursor.advance(AF_DontPopBlockAtEnd);
10281018
}
10291019

10301020
if (topLevelEntry.Kind != llvm::BitstreamEntry::EndBlock) {

tools/driver/modulewrap_main.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,7 @@ int modulewrap_main(ArrayRef<const char *> Args, const char *Argv0,
143143
}
144144

145145
// Superficially verify that the input is a swift module file.
146-
llvm::BitstreamReader Reader((unsigned char *)(*ErrOrBuf)->getBufferStart(),
147-
(unsigned char *)(*ErrOrBuf)->getBufferEnd());
148-
llvm::BitstreamCursor Cursor(Reader);
146+
llvm::BitstreamCursor Cursor(ErrOrBuf.get()->getMemBufferRef());
149147
for (unsigned char Byte : serialization::MODULE_SIGNATURE)
150148
if (Cursor.AtEndOfStream() || Cursor.Read(8) != Byte) {
151149
Instance.getDiags().diagnose(SourceLoc(), diag::error_parse_input_file,

0 commit comments

Comments
 (0)