Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 20 additions & 26 deletions clang-tools-extra/clang-doc/BitcodeReader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -847,9 +847,11 @@ llvm::Error ClangDocBitcodeReader::readBlock(unsigned ID, T I) {

while (true) {
unsigned BlockOrCode = 0;
Cursor Res = skipUntilRecordOrBlock(BlockOrCode);
llvm::Expected<Cursor> C = skipUntilRecordOrBlock(BlockOrCode);
if (!C)
return C.takeError();

switch (Res) {
switch (*C) {
case Cursor::BadBlock:
return llvm::createStringError(llvm::inconvertibleErrorCode(),
"bad block found");
Expand Down Expand Up @@ -985,45 +987,39 @@ llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
}
}

ClangDocBitcodeReader::Cursor
llvm::Expected<ClangDocBitcodeReader::Cursor>
ClangDocBitcodeReader::skipUntilRecordOrBlock(unsigned &BlockOrRecordID) {
llvm::TimeTraceScope("Reducing infos", "skipUntilRecordOrBlock");
BlockOrRecordID = 0;

while (!Stream.AtEndOfStream()) {
Expected<unsigned> MaybeCode = Stream.ReadCode();
if (!MaybeCode) {
// FIXME this drops the error on the floor.
consumeError(MaybeCode.takeError());
return Cursor::BadBlock;
}
Expected<unsigned> Code = Stream.ReadCode();
if (!Code)
return Code.takeError();

unsigned Code = MaybeCode.get();
if (Code >= static_cast<unsigned>(llvm::bitc::FIRST_APPLICATION_ABBREV)) {
if (*Code >= static_cast<unsigned>(llvm::bitc::FIRST_APPLICATION_ABBREV)) {
BlockOrRecordID = Code;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bot caught this, Code needs to be dereferenced since it's Expected now.

return Cursor::Record;
}
switch (static_cast<llvm::bitc::FixedAbbrevIDs>(Code)) {
switch (static_cast<llvm::bitc::FixedAbbrevIDs>(*Code)) {
case llvm::bitc::ENTER_SUBBLOCK:
if (Expected<unsigned> MaybeID = Stream.ReadSubBlockID())
BlockOrRecordID = MaybeID.get();
else {
// FIXME this drops the error on the floor.
consumeError(MaybeID.takeError());
}
else
return MaybeID.takeError();
return Cursor::BlockBegin;
case llvm::bitc::END_BLOCK:
if (Stream.ReadBlockEnd())
return Cursor::BadBlock;
return llvm::createStringError(llvm::inconvertibleErrorCode(),
"error at end of block");
return Cursor::BlockEnd;
case llvm::bitc::DEFINE_ABBREV:
if (llvm::Error Err = Stream.ReadAbbrevRecord()) {
// FIXME this drops the error on the floor.
consumeError(std::move(Err));
}
if (llvm::Error Err = Stream.ReadAbbrevRecord())
return std::move(Err);
continue;
case llvm::bitc::UNABBREV_RECORD:
return Cursor::BadBlock;
return llvm::createStringError(llvm::inconvertibleErrorCode(),
"found unabbreviated record");
case llvm::bitc::FIRST_APPLICATION_ABBREV:
llvm_unreachable("Unexpected abbrev id.");
}
Expand Down Expand Up @@ -1149,10 +1145,8 @@ ClangDocBitcodeReader::readBitcode() {
return std::move(Err);
continue;
default:
if (llvm::Error Err = Stream.SkipBlock()) {
// FIXME this drops the error on the floor.
consumeError(std::move(Err));
}
if (llvm::Error Err = Stream.SkipBlock())
return std::move(Err);
continue;
}
}
Expand Down
2 changes: 1 addition & 1 deletion clang-tools-extra/clang-doc/BitcodeReader.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class ClangDocBitcodeReader {

// Helper function to step through blocks to find and dispatch the next record
// or block to be read.
Cursor skipUntilRecordOrBlock(unsigned &BlockOrRecordID);
llvm::Expected<Cursor> skipUntilRecordOrBlock(unsigned &BlockOrRecordID);

// Helper function to set up the appropriate type of Info.
llvm::Expected<std::unique_ptr<Info>> readBlockToInfo(unsigned ID);
Expand Down
Loading