@@ -1197,7 +1197,8 @@ ModuleFile::getConformanceChecked(ProtocolConformanceID conformanceID) {
1197
1197
}
1198
1198
}
1199
1199
1200
- GenericParamList *ModuleFile::maybeReadGenericParams (DeclContext *DC) {
1200
+ Expected<GenericParamList *>
1201
+ ModuleFile::maybeReadGenericParams (DeclContext *DC) {
1201
1202
using namespace decls_block ;
1202
1203
1203
1204
assert (DC && " need a context for the decls in the list" );
@@ -1222,7 +1223,10 @@ GenericParamList *ModuleFile::maybeReadGenericParams(DeclContext *DC) {
1222
1223
ArrayRef<uint64_t > paramIDs;
1223
1224
GenericParamListLayout::readRecord (scratch, paramIDs);
1224
1225
for (DeclID nextParamID : paramIDs) {
1225
- auto genericParam = cast<GenericTypeParamDecl>(getDecl (nextParamID));
1226
+ Decl *nextParam;
1227
+ UNWRAP (getDeclChecked (nextParamID), nextParam);
1228
+
1229
+ auto genericParam = cast<GenericTypeParamDecl>(nextParam);
1226
1230
params.push_back (genericParam);
1227
1231
}
1228
1232
@@ -3427,7 +3431,8 @@ class DeclDeserializer {
3427
3431
DeclContext *DC;
3428
3432
UNWRAP (MF.getDeclContextChecked (contextID), DC);
3429
3433
3430
- auto genericParams = MF.maybeReadGenericParams (DC);
3434
+ GenericParamList *genericParams;
3435
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
3431
3436
if (declOrOffset.isComplete ())
3432
3437
return declOrOffset;
3433
3438
@@ -3586,7 +3591,8 @@ class DeclDeserializer {
3586
3591
if (declOrOffset.isComplete ())
3587
3592
return declOrOffset;
3588
3593
3589
- auto genericParams = MF.maybeReadGenericParams (DC);
3594
+ GenericParamList *genericParams;
3595
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
3590
3596
if (declOrOffset.isComplete ())
3591
3597
return declOrOffset;
3592
3598
@@ -3700,7 +3706,8 @@ class DeclDeserializer {
3700
3706
if (declOrOffset.isComplete ())
3701
3707
return declOrOffset;
3702
3708
3703
- auto *genericParams = MF.maybeReadGenericParams (parent);
3709
+ GenericParamList *genericParams;
3710
+ UNWRAP (MF.maybeReadGenericParams (parent), genericParams);
3704
3711
if (declOrOffset.isComplete ())
3705
3712
return declOrOffset;
3706
3713
@@ -4254,7 +4261,8 @@ class DeclDeserializer {
4254
4261
// Read generic params before reading the type, because the type may
4255
4262
// reference generic parameters, and we want them to have a dummy
4256
4263
// DeclContext for now.
4257
- GenericParamList *genericParams = MF.maybeReadGenericParams (DC);
4264
+ GenericParamList *genericParams;
4265
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
4258
4266
4259
4267
auto staticSpelling = getActualStaticSpellingKind (rawStaticSpelling);
4260
4268
if (!staticSpelling.has_value ())
@@ -4488,7 +4496,8 @@ class DeclDeserializer {
4488
4496
if (declOrOffset.isComplete ())
4489
4497
return cast<OpaqueTypeDecl>(declOrOffset.get ());
4490
4498
4491
- auto genericParams = MF.maybeReadGenericParams (declContext);
4499
+ GenericParamList *genericParams;
4500
+ UNWRAP (MF.maybeReadGenericParams (declContext), genericParams);
4492
4501
4493
4502
// Create the decl.
4494
4503
auto opaqueDecl = OpaqueTypeDecl::get (
@@ -4689,7 +4698,8 @@ class DeclDeserializer {
4689
4698
ctx.evaluator .cacheOutput (InheritedProtocolsRequest{proto},
4690
4699
ctx.AllocateCopy (inherited));
4691
4700
4692
- auto genericParams = MF.maybeReadGenericParams (DC);
4701
+ GenericParamList *genericParams;
4702
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
4693
4703
assert (genericParams && " protocol with no generic parameters?" );
4694
4704
ctx.evaluator .cacheOutput (GenericParamListRequest{proto},
4695
4705
std::move (genericParams));
@@ -4884,7 +4894,8 @@ class DeclDeserializer {
4884
4894
if (declOrOffset.isComplete ())
4885
4895
return declOrOffset;
4886
4896
4887
- auto genericParams = MF.maybeReadGenericParams (DC);
4897
+ GenericParamList *genericParams;
4898
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
4888
4899
if (declOrOffset.isComplete ())
4889
4900
return declOrOffset;
4890
4901
@@ -4962,7 +4973,8 @@ class DeclDeserializer {
4962
4973
return DCOrError.takeError ();
4963
4974
auto DC = DCOrError.get ();
4964
4975
4965
- auto genericParams = MF.maybeReadGenericParams (DC);
4976
+ GenericParamList *genericParams;
4977
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
4966
4978
if (declOrOffset.isComplete ())
4967
4979
return declOrOffset;
4968
4980
@@ -5157,7 +5169,8 @@ class DeclDeserializer {
5157
5169
if (declOrOffset.isComplete ())
5158
5170
return declOrOffset;
5159
5171
5160
- auto *genericParams = MF.maybeReadGenericParams (parent);
5172
+ GenericParamList *genericParams;
5173
+ UNWRAP (MF.maybeReadGenericParams (parent), genericParams);
5161
5174
if (declOrOffset.isComplete ())
5162
5175
return declOrOffset;
5163
5176
@@ -5263,7 +5276,12 @@ class DeclDeserializer {
5263
5276
// Generic parameter lists are written from outermost to innermost.
5264
5277
// Keep reading until we run out of generic parameter lists.
5265
5278
GenericParamList *outerParams = nullptr ;
5266
- while (auto *genericParams = MF.maybeReadGenericParams (DC)) {
5279
+ while (true ) {
5280
+ GenericParamList *genericParams;
5281
+ UNWRAP (MF.maybeReadGenericParams (DC), genericParams);
5282
+ if (!genericParams)
5283
+ break ;
5284
+
5267
5285
genericParams->setOuterParameters (outerParams);
5268
5286
5269
5287
// Set up the DeclContexts for the GenericTypeParamDecls in the list.
@@ -5407,7 +5425,8 @@ class DeclDeserializer {
5407
5425
if (declOrOffset.isComplete ())
5408
5426
return declOrOffset;
5409
5427
5410
- auto *genericParams = MF.maybeReadGenericParams (parent);
5428
+ GenericParamList *genericParams;
5429
+ UNWRAP (MF.maybeReadGenericParams (parent), genericParams);
5411
5430
if (declOrOffset.isComplete ())
5412
5431
return declOrOffset;
5413
5432
0 commit comments