@@ -585,7 +585,10 @@ Expected<Pattern *> ModuleFile::readPattern(DeclContext *owningDC) {
585
585
586
586
auto var = cast<VarDecl>(deserialized.get ());
587
587
auto result = NamedPattern::createImplicit (getContext (), var);
588
- recordPatternType (result, getType (typeID));
588
+ auto typeOrErr = getTypeChecked (typeID);
589
+ if (!typeOrErr)
590
+ return typeOrErr.takeError ();
591
+ recordPatternType (result, typeOrErr.get ());
589
592
restoreOffset.reset ();
590
593
return result;
591
594
}
@@ -3021,7 +3024,14 @@ void ModuleFile::configureStorage(AbstractStorageDecl *decl,
3021
3024
3022
3025
SmallVector<AccessorDecl*, 8 > accessors;
3023
3026
for (DeclID id : rawIDs.IDs ) {
3024
- auto accessor = dyn_cast_or_null<AccessorDecl>(getDecl (id));
3027
+ auto accessorOrErr = getDeclChecked (id);
3028
+ if (!accessorOrErr) {
3029
+ if (!getContext ().LangOpts .EnableDeserializationRecovery )
3030
+ fatal (accessorOrErr.takeError ());
3031
+ diagnoseAndConsumeError (accessorOrErr.takeError ());
3032
+ continue ;
3033
+ }
3034
+ auto accessor = dyn_cast_or_null<AccessorDecl>(accessorOrErr.get ());
3025
3035
if (!accessor) return ;
3026
3036
accessors.push_back (accessor);
3027
3037
}
@@ -3241,9 +3251,11 @@ class DeclDeserializer {
3241
3251
auto genericSig = MF.getGenericSignature (genericSigID);
3242
3252
alias->setGenericSignature (genericSig);
3243
3253
3244
- auto underlying = MF.getType (underlyingTypeID);
3245
- alias->setUnderlyingType (underlying);
3246
-
3254
+ auto underlyingOrErr = MF.getTypeChecked (underlyingTypeID);
3255
+ if (!underlyingOrErr)
3256
+ return underlyingOrErr.takeError ();
3257
+ alias->setUnderlyingType (underlyingOrErr.get ());
3258
+
3247
3259
if (auto accessLevel = getActualAccessLevel (rawAccessLevel))
3248
3260
alias->setAccess (*accessLevel);
3249
3261
else
@@ -4174,7 +4186,9 @@ class DeclDeserializer {
4174
4186
rawAccessLevel);
4175
4187
4176
4188
auto declContext = MF.getDeclContext (contextID);
4177
- auto interfaceSig = MF.getGenericSignature (interfaceSigID);
4189
+ auto interfaceSigOrErr = MF.getGenericSignatureChecked (interfaceSigID);
4190
+ if (!interfaceSigOrErr)
4191
+ return interfaceSigOrErr.takeError ();
4178
4192
4179
4193
// Check for reentrancy.
4180
4194
if (declOrOffset.isComplete ())
@@ -4185,7 +4199,7 @@ class DeclDeserializer {
4185
4199
// Create the decl.
4186
4200
auto opaqueDecl = OpaqueTypeDecl::get (
4187
4201
/* NamingDecl=*/ nullptr , genericParams, declContext,
4188
- interfaceSig , /* OpaqueReturnTypeReprs*/ { });
4202
+ interfaceSigOrErr. get () , /* OpaqueReturnTypeReprs*/ { });
4189
4203
declOrOffset = opaqueDecl;
4190
4204
4191
4205
auto namingDecl = cast<ValueDecl>(MF.getDecl (namingDeclID));
0 commit comments