@@ -585,7 +585,10 @@ Expected<Pattern *> ModuleFile::readPattern(DeclContext *owningDC) {
585585
586586 auto var = cast<VarDecl>(deserialized.get ());
587587 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 ());
589592 restoreOffset.reset ();
590593 return result;
591594 }
@@ -3021,7 +3024,14 @@ void ModuleFile::configureStorage(AbstractStorageDecl *decl,
30213024
30223025 SmallVector<AccessorDecl*, 8 > accessors;
30233026 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 ());
30253035 if (!accessor) return ;
30263036 accessors.push_back (accessor);
30273037 }
@@ -3241,9 +3251,11 @@ class DeclDeserializer {
32413251 auto genericSig = MF.getGenericSignature (genericSigID);
32423252 alias->setGenericSignature (genericSig);
32433253
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+
32473259 if (auto accessLevel = getActualAccessLevel (rawAccessLevel))
32483260 alias->setAccess (*accessLevel);
32493261 else
@@ -4174,7 +4186,9 @@ class DeclDeserializer {
41744186 rawAccessLevel);
41754187
41764188 auto declContext = MF.getDeclContext (contextID);
4177- auto interfaceSig = MF.getGenericSignature (interfaceSigID);
4189+ auto interfaceSigOrErr = MF.getGenericSignatureChecked (interfaceSigID);
4190+ if (!interfaceSigOrErr)
4191+ return interfaceSigOrErr.takeError ();
41784192
41794193 // Check for reentrancy.
41804194 if (declOrOffset.isComplete ())
@@ -4185,7 +4199,7 @@ class DeclDeserializer {
41854199 // Create the decl.
41864200 auto opaqueDecl = OpaqueTypeDecl::get (
41874201 /* NamingDecl=*/ nullptr , genericParams, declContext,
4188- interfaceSig , /* OpaqueReturnTypeReprs*/ { });
4202+ interfaceSigOrErr. get () , /* OpaqueReturnTypeReprs*/ { });
41894203 declOrOffset = opaqueDecl;
41904204
41914205 auto namingDecl = cast<ValueDecl>(MF.getDecl (namingDeclID));
0 commit comments