Skip to content

Commit 1311a80

Browse files
committed
Serialization: Bubble up errors under readParameterList
rdar://131002388
1 parent fb0a1b9 commit 1311a80

File tree

2 files changed

+23
-11
lines changed

2 files changed

+23
-11
lines changed

lib/Serialization/Deserialization.cpp

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ getActualClangDeclPathComponentKind(uint64_t raw) {
519519
return std::nullopt;
520520
}
521521

522-
ParameterList *ModuleFile::readParameterList() {
522+
Expected<ParameterList *> ModuleFile::readParameterList() {
523523
using namespace decls_block;
524524

525525
SmallVector<uint64_t, 8> scratch;
@@ -534,8 +534,11 @@ ParameterList *ModuleFile::readParameterList() {
534534
decls_block::ParameterListLayout::readRecord(scratch, rawMemberIDs);
535535

536536
SmallVector<ParamDecl *, 8> params;
537-
for (DeclID paramID : rawMemberIDs)
538-
params.push_back(cast<ParamDecl>(getDecl(paramID)));
537+
for (DeclID paramID : rawMemberIDs) {
538+
Decl *param;
539+
UNWRAP(getDeclChecked(paramID), param);
540+
params.push_back(cast<ParamDecl>(param));
541+
}
539542

540543
return ParameterList::create(getContext(), params);
541544
}
@@ -3680,7 +3683,8 @@ class DeclDeserializer {
36803683
else
36813684
return MF.diagnoseFatal();
36823685

3683-
auto *bodyParams = MF.readParameterList();
3686+
ParameterList *bodyParams;
3687+
UNWRAP(MF.readParameterList(), bodyParams);
36843688
assert(bodyParams && "missing parameters for constructor");
36853689
ctor->setParameters(bodyParams);
36863690

@@ -4264,7 +4268,8 @@ class DeclDeserializer {
42644268
fn->setStatic(isStatic);
42654269
fn->setImplicitlyUnwrappedOptional(isIUO);
42664270

4267-
ParameterList *paramList = MF.readParameterList();
4271+
ParameterList *paramList;
4272+
UNWRAP(MF.readParameterList(), paramList);
42684273
fn->setParameters(paramList);
42694274

42704275
auto lifetimeDependenceInfo = MF.maybeReadLifetimeDependenceInfo(
@@ -4992,7 +4997,8 @@ class DeclDeserializer {
49924997

49934998
// Read payload parameter list, if it exists.
49944999
if (hasPayload) {
4995-
auto *paramList = MF.readParameterList();
5000+
ParameterList *paramList;
5001+
UNWRAP(MF.readParameterList(), paramList);
49965002
elem->setParameterList(paramList);
49975003
}
49985004

@@ -5111,7 +5117,9 @@ class DeclDeserializer {
51115117

51125118
subscript->setGenericSignature(MF.getGenericSignature(genericSigID));
51135119

5114-
subscript->setIndices(MF.readParameterList());
5120+
ParameterList *paramList;
5121+
UNWRAP(MF.readParameterList(), paramList);
5122+
subscript->setIndices(paramList);
51155123

51165124
MF.configureStorage(subscript, opaqueReadOwnership,
51175125
readImpl, writeImpl, readWriteImpl, accessors);
@@ -5138,9 +5146,12 @@ class DeclDeserializer {
51385146
AddAttribute(new (ctx) OverrideAttr(SourceLoc()));
51395147

51405148
if (opaqueReturnTypeID) {
5149+
Decl *opaqueReturnType;
5150+
UNWRAP(MF.getDeclChecked(opaqueReturnTypeID), opaqueReturnType);
5151+
51415152
ctx.evaluator.cacheOutput(
51425153
OpaqueResultTypeRequest{subscript},
5143-
cast<OpaqueTypeDecl>(MF.getDecl(opaqueReturnTypeID)));
5154+
cast<OpaqueTypeDecl>(opaqueReturnType));
51445155
}
51455156

51465157
return subscript;
@@ -5352,8 +5363,9 @@ class DeclDeserializer {
53525363
macro->setGenericSignature(MF.getGenericSignature(genericSigID));
53535364
macro->resultType.setType(resultInterfaceType);
53545365

5355-
if (hasParameterList)
5356-
macro->parameterList = MF.readParameterList();
5366+
if (hasParameterList) {
5367+
UNWRAP(MF.readParameterList(), macro->parameterList);
5368+
}
53575369

53585370
if (auto accessLevel = getActualAccessLevel(rawAccessLevel))
53595371
macro->setAccess(*accessLevel);

lib/Serialization/ModuleFile.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ class ModuleFile
502502
/// Recursively reads a pattern from \c DeclTypeCursor.
503503
llvm::Expected<Pattern *> readPattern(DeclContext *owningDC);
504504

505-
ParameterList *readParameterList();
505+
llvm::Expected<ParameterList *> readParameterList();
506506

507507
/// Reads a generic param list from \c DeclTypeCursor.
508508
///

0 commit comments

Comments
 (0)