@@ -149,6 +149,8 @@ const char ExtensionError::ID = '\0';
149
149
void ExtensionError::anchor () {}
150
150
const char DeclAttributesDidNotMatch::ID = ' \0 ' ;
151
151
void DeclAttributesDidNotMatch::anchor () {}
152
+ const char InvalidRecordKindError::ID = ' \0 ' ;
153
+ void InvalidRecordKindError::anchor () {}
152
154
153
155
// / Skips a single record in the bitstream.
154
156
// /
@@ -239,8 +241,8 @@ ParameterList *ModuleFile::readParameterList() {
239
241
fatalIfUnexpected (DeclTypeCursor.advance (AF_DontPopBlockAtEnd));
240
242
unsigned recordID =
241
243
fatalIfUnexpected (DeclTypeCursor.readRecord (entry.ID , scratch));
242
- assert (recordID == PARAMETERLIST);
243
- ( void ) recordID;
244
+ if (recordID != PARAMETERLIST)
245
+ fatal (llvm::make_error<InvalidRecordKindError>( recordID)) ;
244
246
245
247
ArrayRef<uint64_t > rawMemberIDs;
246
248
decls_block::ParameterListLayout::readRecord (scratch, rawMemberIDs);
@@ -312,7 +314,8 @@ Expected<Pattern *> ModuleFile::readPattern(DeclContext *owningDC) {
312
314
assert (next.Kind == llvm::BitstreamEntry::Record);
313
315
314
316
kind = fatalIfUnexpected (DeclTypeCursor.readRecord (next.ID , scratch));
315
- assert (kind == decls_block::TUPLE_PATTERN_ELT);
317
+ if (kind != decls_block::TUPLE_PATTERN_ELT)
318
+ fatal (llvm::make_error<InvalidRecordKindError>(kind));
316
319
317
320
// FIXME: Add something for this record or remove it.
318
321
IdentifierID labelID;
@@ -393,7 +396,7 @@ Expected<Pattern *> ModuleFile::readPattern(DeclContext *owningDC) {
393
396
}
394
397
395
398
default :
396
- return nullptr ;
399
+ return llvm::make_error<InvalidRecordKindError>(kind) ;
397
400
}
398
401
}
399
402
@@ -432,7 +435,7 @@ SILLayout *ModuleFile::readSILLayout(llvm::BitstreamCursor &Cursor) {
432
435
return SILLayout::get (getContext (), canSig, fields, capturesGenerics);
433
436
}
434
437
default :
435
- fatal ();
438
+ fatal (llvm::make_error<InvalidRecordKindError>(kind) );
436
439
}
437
440
}
438
441
@@ -503,7 +506,7 @@ ProtocolConformanceDeserializer::read(
503
506
504
507
// Not a protocol conformance.
505
508
default :
506
- MF.fatal ();
509
+ MF.fatal (llvm::make_error<InvalidRecordKindError>(kind) );
507
510
}
508
511
}
509
512
@@ -1172,7 +1175,7 @@ ModuleFile::getGenericSignatureChecked(serialization::GenericSignatureID ID) {
1172
1175
}
1173
1176
default :
1174
1177
// Not a generic signature; no way to recover.
1175
- fatal ();
1178
+ fatal (llvm::make_error<InvalidRecordKindError>(recordID) );
1176
1179
}
1177
1180
1178
1181
// If we've already deserialized this generic signature, start over to return
@@ -1214,7 +1217,7 @@ ModuleFile::getGenericEnvironmentChecked(serialization::GenericEnvironmentID ID)
1214
1217
unsigned recordID = fatalIfUnexpected (
1215
1218
DeclTypeCursor.readRecord (entry.ID , scratch, &blobData));
1216
1219
if (recordID != GENERIC_ENVIRONMENT)
1217
- fatal ();
1220
+ fatal (llvm::make_error<InvalidRecordKindError>(recordID) );
1218
1221
1219
1222
GenericSignatureID parentSigID;
1220
1223
TypeID existentialID;
@@ -1273,7 +1276,7 @@ ModuleFile::getSubstitutionMapChecked(serialization::SubstitutionMapID id) {
1273
1276
unsigned recordID = fatalIfUnexpected (
1274
1277
DeclTypeCursor.readRecord (entry.ID , scratch, &blobData));
1275
1278
if (recordID != SUBSTITUTION_MAP)
1276
- fatal ();
1279
+ fatal (llvm::make_error<InvalidRecordKindError>(recordID) );
1277
1280
1278
1281
GenericSignatureID genericSigID;
1279
1282
uint64_t numReplacementIDs;
@@ -1629,7 +1632,7 @@ ModuleFile::resolveCrossReference(ModuleID MID, uint32_t pathLen) {
1629
1632
default :
1630
1633
// Unknown xref kind.
1631
1634
pathTrace.addUnknown (recordID);
1632
- fatal ();
1635
+ fatal (llvm::make_error<InvalidRecordKindError>(recordID) );
1633
1636
}
1634
1637
1635
1638
auto getXRefDeclNameForError = [&]() -> DeclName {
@@ -1894,7 +1897,8 @@ ModuleFile::resolveCrossReference(ModuleID MID, uint32_t pathLen) {
1894
1897
}
1895
1898
1896
1899
default :
1897
- llvm_unreachable (" Unhandled path piece" );
1900
+ fatal (llvm::make_error<InvalidRecordKindError>(recordID,
1901
+ " Unhandled path piece" ));
1898
1902
}
1899
1903
1900
1904
pathTrace.addValue (memberName);
@@ -2100,7 +2104,7 @@ ModuleFile::resolveCrossReference(ModuleID MID, uint32_t pathLen) {
2100
2104
default :
2101
2105
// Unknown xref path piece.
2102
2106
pathTrace.addUnknown (recordID);
2103
- fatal ();
2107
+ fatal (llvm::make_error<InvalidRecordKindError>(recordID) );
2104
2108
}
2105
2109
2106
2110
Optional<PrettyStackTraceModuleFile> traceMsg;
@@ -2273,7 +2277,8 @@ DeclContext *ModuleFile::getLocalDeclContext(LocalDeclContextID DCID) {
2273
2277
}
2274
2278
2275
2279
default :
2276
- llvm_unreachable (" Unknown record ID found when reading local DeclContext." );
2280
+ fatal (llvm::make_error<InvalidRecordKindError>(recordID,
2281
+ " Unknown record ID found when reading local DeclContext." ));
2277
2282
}
2278
2283
return declContextOrOffset;
2279
2284
}
@@ -5085,7 +5090,7 @@ llvm::Error DeclDeserializer::deserializeDeclCommon() {
5085
5090
5086
5091
default :
5087
5092
// We don't know how to deserialize this kind of attribute.
5088
- MF.fatal ();
5093
+ MF.fatal (llvm::make_error<InvalidRecordKindError>(recordID) );
5089
5094
}
5090
5095
5091
5096
if (!skipAttr) {
@@ -5211,7 +5216,7 @@ DeclDeserializer::getDeclCheckedImpl(
5211
5216
5212
5217
default :
5213
5218
// We don't know how to deserialize this kind of decl.
5214
- MF.fatal ();
5219
+ MF.fatal (llvm::make_error<InvalidRecordKindError>(recordID) );
5215
5220
}
5216
5221
}
5217
5222
@@ -6431,7 +6436,7 @@ Expected<Type> ModuleFile::getTypeChecked(TypeID TID) {
6431
6436
#undef TYPE
6432
6437
default :
6433
6438
// We don't know how to deserialize this kind of type.
6434
- fatal ();
6439
+ fatal (llvm::make_error<InvalidRecordKindError>(recordID) );
6435
6440
}
6436
6441
}
6437
6442
@@ -6550,7 +6555,7 @@ ModuleFile::getClangType(ClangTypeID TID) {
6550
6555
DeclTypeCursor.readRecord (entry.ID , scratch, &blobData));
6551
6556
6552
6557
if (recordID != decls_block::CLANG_TYPE)
6553
- fatal ();
6558
+ fatal (llvm::make_error<InvalidRecordKindError>(recordID) );
6554
6559
6555
6560
auto &clangLoader = *getContext ().getClangModuleLoader ();
6556
6561
auto clangType =
@@ -6640,8 +6645,8 @@ void ModuleFile::loadAllMembers(Decl *container, uint64_t contextData) {
6640
6645
6641
6646
unsigned kind =
6642
6647
fatalIfUnexpected (DeclTypeCursor.readRecord (entry.ID , memberIDBuffer));
6643
- assert (kind == decls_block::MEMBERS);
6644
- ( void ) kind;
6648
+ if (kind != decls_block::MEMBERS)
6649
+ fatal (llvm::make_error<InvalidRecordKindError>( kind)) ;
6645
6650
6646
6651
ArrayRef<uint64_t > rawMemberIDs;
6647
6652
decls_block::MembersLayout::readRecord (memberIDBuffer, rawMemberIDs);
@@ -6845,9 +6850,10 @@ void ModuleFile::finishNormalConformance(NormalProtocolConformance *conformance,
6845
6850
6846
6851
unsigned kind =
6847
6852
fatalIfUnexpected (DeclTypeCursor.readRecord (entry.ID , scratch));
6848
- (void ) kind;
6849
- assert (kind == NORMAL_PROTOCOL_CONFORMANCE &&
6850
- " registered lazy loader incorrectly" );
6853
+ if (kind != NORMAL_PROTOCOL_CONFORMANCE)
6854
+ fatal (llvm::make_error<InvalidRecordKindError>(kind,
6855
+ " registered lazy loader incorrectly" ));
6856
+
6851
6857
NormalProtocolConformanceLayout::readRecord (scratch, protoID,
6852
6858
contextID, typeCount,
6853
6859
valueCount, conformanceCount,
0 commit comments