@@ -527,7 +527,10 @@ ModuleFile::readConformanceChecked(llvm::BitstreamCursor &Cursor,
527
527
" reading specialized conformance for" ,
528
528
conformingType);
529
529
530
- auto subMap = getSubstitutionMap (substitutionMapID);
530
+ auto subMapOrError = getSubstitutionMapChecked (substitutionMapID);
531
+ if (!subMapOrError)
532
+ return subMapOrError.takeError ();
533
+ auto subMap = subMapOrError.get ();
531
534
532
535
ProtocolConformanceRef genericConformance =
533
536
readConformance (Cursor, genericEnv);
@@ -651,7 +654,11 @@ Expected<NormalProtocolConformance *> ModuleFile::readNormalConformanceChecked(
651
654
rawIDs);
652
655
653
656
ASTContext &ctx = getContext ();
654
- DeclContext *dc = getDeclContext (contextID);
657
+ auto doOrError = getDeclContextChecked (contextID);
658
+ if (!doOrError)
659
+ return doOrError.takeError ();
660
+ DeclContext *dc = doOrError.get ();
661
+
655
662
assert (!isa<ClangModuleUnit>(dc->getModuleScopeContext ())
656
663
&& " should not have serialized a conformance from a clang module" );
657
664
Type conformingType = dc->getDeclaredInterfaceType ();
@@ -1077,7 +1084,10 @@ ModuleFile::getSubstitutionMapChecked(serialization::SubstitutionMapID id) {
1077
1084
conformances.reserve (numConformances);
1078
1085
for (unsigned i : range (numConformances)) {
1079
1086
(void )i;
1080
- conformances.push_back (readConformance (DeclTypeCursor));
1087
+ auto conformanceOrError = readConformanceChecked (DeclTypeCursor);
1088
+ if (!conformanceOrError)
1089
+ return conformanceOrError.takeError ();
1090
+ conformances.push_back (conformanceOrError.get ());
1081
1091
}
1082
1092
1083
1093
// Form the substitution map and record it.
@@ -2780,7 +2790,10 @@ class DeclDeserializer {
2780
2790
var->setIsSetterMutating (isSetterMutating);
2781
2791
declOrOffset = var;
2782
2792
2783
- Type interfaceType = MF.getType (interfaceTypeID);
2793
+ auto interfaceTypeOrError = MF.getTypeChecked (interfaceTypeID);
2794
+ if (!interfaceTypeOrError)
2795
+ return interfaceTypeOrError.takeError ();
2796
+ Type interfaceType = interfaceTypeOrError.get ();
2784
2797
var->setInterfaceType (interfaceType);
2785
2798
var->setImplicitlyUnwrappedOptional (isIUO);
2786
2799
@@ -3203,9 +3216,12 @@ class DeclDeserializer {
3203
3216
auto genericSig = MF.getGenericSignature (genericSigID);
3204
3217
if (genericSig)
3205
3218
opaqueDecl->setGenericSignature (genericSig);
3206
- if (underlyingTypeID)
3207
- opaqueDecl->setUnderlyingTypeSubstitutions (
3208
- MF.getSubstitutionMap (underlyingTypeID));
3219
+ if (underlyingTypeID) {
3220
+ auto subMapOrError = MF.getSubstitutionMapChecked (underlyingTypeID);
3221
+ if (!subMapOrError)
3222
+ return subMapOrError.takeError ();
3223
+ opaqueDecl->setUnderlyingTypeSubstitutions (subMapOrError.get ());
3224
+ }
3209
3225
SubstitutionMap subs;
3210
3226
if (genericSig) {
3211
3227
subs = genericSig->getIdentitySubstitutionMap ();
@@ -5044,7 +5060,11 @@ class TypeDeserializer {
5044
5060
decls_block::OpaqueArchetypeTypeLayout::readRecord (scratch,
5045
5061
opaqueDeclID, subsID);
5046
5062
5047
- auto opaqueDecl = cast<OpaqueTypeDecl>(MF.getDecl (opaqueDeclID));
5063
+ auto opaqueTypeOrError = MF.getDeclChecked (opaqueDeclID);
5064
+ if (!opaqueTypeOrError)
5065
+ return opaqueTypeOrError.takeError ();
5066
+
5067
+ auto opaqueDecl = cast<OpaqueTypeDecl>(opaqueTypeOrError.get ());
5048
5068
auto subs = MF.getSubstitutionMap (subsID);
5049
5069
5050
5070
return OpaqueTypeArchetypeType::get (opaqueDecl, subs);
0 commit comments