@@ -1198,7 +1198,8 @@ ModuleFile::getConformanceChecked(ProtocolConformanceID conformanceID) {
1198
1198
}
1199
1199
}
1200
1200
1201
- GenericParamList *ModuleFile::maybeReadGenericParams (DeclContext *DC) {
1201
+ Expected<GenericParamList *>
1202
+ ModuleFile::maybeReadGenericParams (DeclContext *DC) {
1202
1203
using namespace decls_block ;
1203
1204
1204
1205
assert (DC && " need a context for the decls in the list" );
@@ -1223,7 +1224,10 @@ GenericParamList *ModuleFile::maybeReadGenericParams(DeclContext *DC) {
1223
1224
ArrayRef<uint64_t > paramIDs;
1224
1225
GenericParamListLayout::readRecord (scratch, paramIDs);
1225
1226
for (DeclID nextParamID : paramIDs) {
1226
- auto genericParam = cast<GenericTypeParamDecl>(getDecl (nextParamID));
1227
+ Decl *nextParam;
1228
+ UNWRAP (getDeclChecked (nextParamID), nextParam);
1229
+
1230
+ auto genericParam = cast<GenericTypeParamDecl>(nextParam);
1227
1231
params.push_back (genericParam);
1228
1232
}
1229
1233
@@ -3428,7 +3432,8 @@ class DeclDeserializer {
3428
3432
DeclContext *DC;
3429
3433
UNWRAP (MF.getDeclContextChecked (contextID), DC);
3430
3434
3431
- auto genericParams = MF.maybeReadGenericParams (DC);
3435
+ GenericParamList *genericParams;
3436
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
3432
3437
if (declOrOffset.isComplete ())
3433
3438
return declOrOffset;
3434
3439
@@ -3587,7 +3592,8 @@ class DeclDeserializer {
3587
3592
if (declOrOffset.isComplete ())
3588
3593
return declOrOffset;
3589
3594
3590
- auto genericParams = MF.maybeReadGenericParams (DC);
3595
+ GenericParamList *genericParams;
3596
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
3591
3597
if (declOrOffset.isComplete ())
3592
3598
return declOrOffset;
3593
3599
@@ -3701,7 +3707,8 @@ class DeclDeserializer {
3701
3707
if (declOrOffset.isComplete ())
3702
3708
return declOrOffset;
3703
3709
3704
- auto *genericParams = MF.maybeReadGenericParams (parent);
3710
+ GenericParamList *genericParams;
3711
+ UNWRAP (MF.maybeReadGenericParams (parent), genericParams);
3705
3712
if (declOrOffset.isComplete ())
3706
3713
return declOrOffset;
3707
3714
@@ -4262,7 +4269,8 @@ class DeclDeserializer {
4262
4269
// Read generic params before reading the type, because the type may
4263
4270
// reference generic parameters, and we want them to have a dummy
4264
4271
// DeclContext for now.
4265
- GenericParamList *genericParams = MF.maybeReadGenericParams (DC);
4272
+ GenericParamList *genericParams;
4273
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
4266
4274
4267
4275
auto staticSpelling = getActualStaticSpellingKind (rawStaticSpelling);
4268
4276
if (!staticSpelling.has_value ())
@@ -4496,7 +4504,8 @@ class DeclDeserializer {
4496
4504
if (declOrOffset.isComplete ())
4497
4505
return cast<OpaqueTypeDecl>(declOrOffset.get ());
4498
4506
4499
- auto genericParams = MF.maybeReadGenericParams (declContext);
4507
+ GenericParamList *genericParams;
4508
+ UNWRAP (MF.maybeReadGenericParams (declContext), genericParams);
4500
4509
4501
4510
// Create the decl.
4502
4511
auto opaqueDecl = OpaqueTypeDecl::get (
@@ -4697,7 +4706,8 @@ class DeclDeserializer {
4697
4706
ctx.evaluator .cacheOutput (InheritedProtocolsRequest{proto},
4698
4707
ctx.AllocateCopy (inherited));
4699
4708
4700
- auto genericParams = MF.maybeReadGenericParams (DC);
4709
+ GenericParamList *genericParams;
4710
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
4701
4711
assert (genericParams && " protocol with no generic parameters?" );
4702
4712
ctx.evaluator .cacheOutput (GenericParamListRequest{proto},
4703
4713
std::move (genericParams));
@@ -4892,7 +4902,8 @@ class DeclDeserializer {
4892
4902
if (declOrOffset.isComplete ())
4893
4903
return declOrOffset;
4894
4904
4895
- auto genericParams = MF.maybeReadGenericParams (DC);
4905
+ GenericParamList *genericParams;
4906
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
4896
4907
if (declOrOffset.isComplete ())
4897
4908
return declOrOffset;
4898
4909
@@ -4970,7 +4981,8 @@ class DeclDeserializer {
4970
4981
return DCOrError.takeError ();
4971
4982
auto DC = DCOrError.get ();
4972
4983
4973
- auto genericParams = MF.maybeReadGenericParams (DC);
4984
+ GenericParamList *genericParams;
4985
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
4974
4986
if (declOrOffset.isComplete ())
4975
4987
return declOrOffset;
4976
4988
@@ -5165,7 +5177,8 @@ class DeclDeserializer {
5165
5177
if (declOrOffset.isComplete ())
5166
5178
return declOrOffset;
5167
5179
5168
- auto *genericParams = MF.maybeReadGenericParams (parent);
5180
+ GenericParamList *genericParams;
5181
+ UNWRAP (MF.maybeReadGenericParams (parent), genericParams);
5169
5182
if (declOrOffset.isComplete ())
5170
5183
return declOrOffset;
5171
5184
@@ -5271,7 +5284,12 @@ class DeclDeserializer {
5271
5284
// Generic parameter lists are written from outermost to innermost.
5272
5285
// Keep reading until we run out of generic parameter lists.
5273
5286
GenericParamList *outerParams = nullptr ;
5274
- while (auto *genericParams = MF.maybeReadGenericParams (DC)) {
5287
+ while (true ) {
5288
+ GenericParamList *genericParams;
5289
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
5290
+ if (!genericParams)
5291
+ break ;
5292
+
5275
5293
genericParams->setOuterParameters (outerParams);
5276
5294
5277
5295
// Set up the DeclContexts for the GenericTypeParamDecls in the list.
@@ -5415,7 +5433,8 @@ class DeclDeserializer {
5415
5433
if (declOrOffset.isComplete ())
5416
5434
return declOrOffset;
5417
5435
5418
- auto *genericParams = MF.maybeReadGenericParams (parent);
5436
+ GenericParamList *genericParams;
5437
+ UNWRAP (MF.maybeReadGenericParams (parent), genericParams);
5419
5438
if (declOrOffset.isComplete ())
5420
5439
return declOrOffset;
5421
5440
0 commit comments