@@ -601,7 +601,10 @@ Expected<Pattern *> ModuleFile::readPattern(DeclContext *owningDC) {
601
601
602
602
auto var = cast<VarDecl>(deserialized.get ());
603
603
auto result = NamedPattern::createImplicit (getContext (), var);
604
- recordPatternType (result, getType (typeID));
604
+ auto typeOrErr = getTypeChecked (typeID);
605
+ if (!typeOrErr)
606
+ return typeOrErr.takeError ();
607
+ recordPatternType (result, typeOrErr.get ());
605
608
restoreOffset.reset ();
606
609
return result;
607
610
}
@@ -3037,7 +3040,14 @@ void ModuleFile::configureStorage(AbstractStorageDecl *decl,
3037
3040
3038
3041
SmallVector<AccessorDecl*, 8 > accessors;
3039
3042
for (DeclID id : rawIDs.IDs ) {
3040
- auto accessor = dyn_cast_or_null<AccessorDecl>(getDecl (id));
3043
+ auto accessorOrErr = getDeclChecked (id);
3044
+ if (!accessorOrErr) {
3045
+ if (!getContext ().LangOpts .EnableDeserializationRecovery )
3046
+ fatal (accessorOrErr.takeError ());
3047
+ diagnoseAndConsumeError (accessorOrErr.takeError ());
3048
+ continue ;
3049
+ }
3050
+ auto accessor = dyn_cast_or_null<AccessorDecl>(accessorOrErr.get ());
3041
3051
if (!accessor) return ;
3042
3052
accessors.push_back (accessor);
3043
3053
}
@@ -3258,9 +3268,11 @@ class DeclDeserializer {
3258
3268
auto genericSig = MF.getGenericSignature (genericSigID);
3259
3269
alias->setGenericSignature (genericSig);
3260
3270
3261
- auto underlying = MF.getType (underlyingTypeID);
3262
- alias->setUnderlyingType (underlying);
3263
-
3271
+ auto underlyingOrErr = MF.getTypeChecked (underlyingTypeID);
3272
+ if (!underlyingOrErr)
3273
+ return underlyingOrErr.takeError ();
3274
+ alias->setUnderlyingType (underlyingOrErr.get ());
3275
+
3264
3276
if (auto accessLevel = getActualAccessLevel (rawAccessLevel))
3265
3277
alias->setAccess (*accessLevel);
3266
3278
else
@@ -4214,7 +4226,9 @@ class DeclDeserializer {
4214
4226
rawAccessLevel);
4215
4227
4216
4228
auto declContext = MF.getDeclContext (contextID);
4217
- auto interfaceSig = MF.getGenericSignature (interfaceSigID);
4229
+ auto interfaceSigOrErr = MF.getGenericSignatureChecked (interfaceSigID);
4230
+ if (!interfaceSigOrErr)
4231
+ return interfaceSigOrErr.takeError ();
4218
4232
4219
4233
// Check for reentrancy.
4220
4234
if (declOrOffset.isComplete ())
@@ -4225,7 +4239,7 @@ class DeclDeserializer {
4225
4239
// Create the decl.
4226
4240
auto opaqueDecl = OpaqueTypeDecl::get (
4227
4241
/* NamingDecl=*/ nullptr , genericParams, declContext,
4228
- interfaceSig , /* OpaqueReturnTypeReprs*/ { });
4242
+ interfaceSigOrErr. get () , /* OpaqueReturnTypeReprs*/ { });
4229
4243
declOrOffset = opaqueDecl;
4230
4244
4231
4245
auto namingDecl = cast<ValueDecl>(MF.getDecl (namingDeclID));
0 commit comments