@@ -601,7 +601,10 @@ Expected<Pattern *> ModuleFile::readPattern(DeclContext *owningDC) {
601601
602602 auto var = cast<VarDecl>(deserialized.get ());
603603 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 ());
605608 restoreOffset.reset ();
606609 return result;
607610 }
@@ -3037,7 +3040,14 @@ void ModuleFile::configureStorage(AbstractStorageDecl *decl,
30373040
30383041 SmallVector<AccessorDecl*, 8 > accessors;
30393042 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 ());
30413051 if (!accessor) return ;
30423052 accessors.push_back (accessor);
30433053 }
@@ -3258,9 +3268,11 @@ class DeclDeserializer {
32583268 auto genericSig = MF.getGenericSignature (genericSigID);
32593269 alias->setGenericSignature (genericSig);
32603270
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+
32643276 if (auto accessLevel = getActualAccessLevel (rawAccessLevel))
32653277 alias->setAccess (*accessLevel);
32663278 else
@@ -4214,7 +4226,9 @@ class DeclDeserializer {
42144226 rawAccessLevel);
42154227
42164228 auto declContext = MF.getDeclContext (contextID);
4217- auto interfaceSig = MF.getGenericSignature (interfaceSigID);
4229+ auto interfaceSigOrErr = MF.getGenericSignatureChecked (interfaceSigID);
4230+ if (!interfaceSigOrErr)
4231+ return interfaceSigOrErr.takeError ();
42184232
42194233 // Check for reentrancy.
42204234 if (declOrOffset.isComplete ())
@@ -4225,7 +4239,7 @@ class DeclDeserializer {
42254239 // Create the decl.
42264240 auto opaqueDecl = OpaqueTypeDecl::get (
42274241 /* NamingDecl=*/ nullptr , genericParams, declContext,
4228- interfaceSig , /* OpaqueReturnTypeReprs*/ { });
4242+ interfaceSigOrErr. get () , /* OpaqueReturnTypeReprs*/ { });
42294243 declOrOffset = opaqueDecl;
42304244
42314245 auto namingDecl = cast<ValueDecl>(MF.getDecl (namingDeclID));
0 commit comments