diff --git a/lib/Serialization/Deserialization.cpp b/lib/Serialization/Deserialization.cpp index ef371a520ce13..f9992f5ff963b 100644 --- a/lib/Serialization/Deserialization.cpp +++ b/lib/Serialization/Deserialization.cpp @@ -4848,7 +4848,9 @@ class TypeDeserializer { auto substitutedType = substitutedTypeOrError.get(); // Read the substitutions. - auto subMap = MF.getSubstitutionMap(substitutionsID); + auto subMapOrError = MF.getSubstitutionMapChecked(substitutionsID); + if (!subMapOrError) + return subMapOrError.takeError(); auto parentTypeOrError = MF.getTypeChecked(parentTypeID); if (!parentTypeOrError) @@ -4858,11 +4860,12 @@ class TypeDeserializer { if (alias && alias->getAttrs().isUnavailable(ctx) && alias->isCompatibilityAlias()) { - return alias->getUnderlyingType().subst(subMap); + return alias->getUnderlyingType().subst(subMapOrError.get()); } auto parentType = parentTypeOrError.get(); - return TypeAliasType::get(alias, parentType, subMap, substitutedType); + return TypeAliasType::get(alias, parentType, subMapOrError.get(), + substitutedType); } Expected deserializeNominalType(ArrayRef scratch, @@ -5180,9 +5183,11 @@ class TypeDeserializer { return opaqueTypeOrError.takeError(); auto opaqueDecl = cast(opaqueTypeOrError.get()); - auto subs = MF.getSubstitutionMap(subsID); + auto subsOrError = MF.getSubstitutionMapChecked(subsID); + if (!subsOrError) + return subsOrError.takeError(); - return OpaqueTypeArchetypeType::get(opaqueDecl, subs); + return OpaqueTypeArchetypeType::get(opaqueDecl, subsOrError.get()); } Expected deserializeNestedArchetypeType(ArrayRef scratch, @@ -5317,8 +5322,11 @@ class TypeDeserializer { if (!layout) return nullptr; - auto subMap = MF.getSubstitutionMap(subMapID); - return SILBoxType::get(ctx, layout, subMap); + auto subMapOrError = MF.getSubstitutionMapChecked(subMapID); + if (!subMapOrError) + return subMapOrError.takeError(); + + return SILBoxType::get(ctx, layout, subMapOrError.get()); } Expected deserializeSILFunctionType(ArrayRef scratch, @@ -5503,16 +5511,19 @@ class TypeDeserializer { GenericSignature invocationSig = MF.getGenericSignature(rawInvocationGenericSig); - SubstitutionMap invocationSubs = - MF.getSubstitutionMap(rawInvocationSubs).getCanonical(); - SubstitutionMap patternSubs = - MF.getSubstitutionMap(rawPatternSubs).getCanonical(); + auto invocationSubsOrErr = MF.getSubstitutionMapChecked(rawInvocationSubs); + if (!invocationSubsOrErr) + return invocationSubsOrErr.takeError(); + auto patternSubsOrErr = MF.getSubstitutionMapChecked(rawPatternSubs); + if (!patternSubsOrErr) + return patternSubsOrErr.takeError(); return SILFunctionType::get(invocationSig, extInfo, coroutineKind.getValue(), calleeConvention.getValue(), allParams, allYields, allResults, errorResult, - patternSubs, invocationSubs, + patternSubsOrErr.get().getCanonical(), + invocationSubsOrErr.get().getCanonical(), ctx, witnessMethodConformance); }