summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang-tools-extra/clang-doc/BitcodeReader.cpp15
-rw-r--r--clang/lib/Frontend/SerializedDiagnosticReader.cpp13
2 files changed, 16 insertions, 12 deletions
diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp
index 77e67e896c2..c82903f1406 100644
--- a/clang-tools-extra/clang-doc/BitcodeReader.cpp
+++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp
@@ -615,10 +615,12 @@ ClangDocBitcodeReader::skipUntilRecordOrBlock(unsigned &BlockOrRecordID) {
return Cursor::BadBlock;
}
- // FIXME check that the enum is in range.
- auto Code = static_cast<llvm::bitc::FixedAbbrevIDs>(MaybeCode.get());
-
- switch (Code) {
+ unsigned Code = MaybeCode.get();
+ if (Code >= static_cast<unsigned>(llvm::bitc::FIRST_APPLICATION_ABBREV)) {
+ BlockOrRecordID = Code;
+ return Cursor::Record;
+ }
+ switch (static_cast<llvm::bitc::FixedAbbrevIDs>(Code)) {
case llvm::bitc::ENTER_SUBBLOCK:
if (Expected<unsigned> MaybeID = Stream.ReadSubBlockID())
BlockOrRecordID = MaybeID.get();
@@ -639,9 +641,8 @@ ClangDocBitcodeReader::skipUntilRecordOrBlock(unsigned &BlockOrRecordID) {
continue;
case llvm::bitc::UNABBREV_RECORD:
return Cursor::BadBlock;
- default:
- BlockOrRecordID = Code;
- return Cursor::Record;
+ case llvm::bitc::FIRST_APPLICATION_ABBREV:
+ llvm_unreachable("Unexpected abbrev id.");
}
}
llvm_unreachable("Premature stream end.");
diff --git a/clang/lib/Frontend/SerializedDiagnosticReader.cpp b/clang/lib/Frontend/SerializedDiagnosticReader.cpp
index 045d757adbf..eca6f5ee180 100644
--- a/clang/lib/Frontend/SerializedDiagnosticReader.cpp
+++ b/clang/lib/Frontend/SerializedDiagnosticReader.cpp
@@ -124,7 +124,12 @@ SerializedDiagnosticReader::skipUntilRecordOrBlock(
else
return llvm::errorToErrorCode(Res.takeError());
- switch ((llvm::bitc::FixedAbbrevIDs)Code) {
+ if (Code >= static_cast<unsigned>(llvm::bitc::FIRST_APPLICATION_ABBREV)) {
+ // We found a record.
+ BlockOrRecordID = Code;
+ return Cursor::Record;
+ }
+ switch (static_cast<llvm::bitc::FixedAbbrevIDs>(Code)) {
case llvm::bitc::ENTER_SUBBLOCK:
if (Expected<unsigned> Res = Stream.ReadSubBlockID())
BlockOrRecordID = Res.get();
@@ -145,10 +150,8 @@ SerializedDiagnosticReader::skipUntilRecordOrBlock(
case llvm::bitc::UNABBREV_RECORD:
return SDError::UnsupportedConstruct;
- default:
- // We found a record.
- BlockOrRecordID = Code;
- return Cursor::Record;
+ case llvm::bitc::FIRST_APPLICATION_ABBREV:
+ llvm_unreachable("Unexpected abbrev id.");
}
}
OpenPOWER on IntegriCloud