Skip to content

Commit b93d9b6

Browse files
authored
Merge pull request #75547 from xymus/deser-recover
Serialization: Bubble up more errors from readParameterList
2 parents 193b886 + 1311a80 commit b93d9b6

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
}
@@ -3700,7 +3703,8 @@ class DeclDeserializer {
37003703
else
37013704
return MF.diagnoseFatal();
37023705

3703-
auto *bodyParams = MF.readParameterList();
3706+
ParameterList *bodyParams;
3707+
UNWRAP(MF.readParameterList(), bodyParams);
37043708
assert(bodyParams && "missing parameters for constructor");
37053709
ctor->setParameters(bodyParams);
37063710

@@ -4287,7 +4291,8 @@ class DeclDeserializer {
42874291
fn->setStatic(isStatic);
42884292
fn->setImplicitlyUnwrappedOptional(isIUO);
42894293

4290-
ParameterList *paramList = MF.readParameterList();
4294+
ParameterList *paramList;
4295+
UNWRAP(MF.readParameterList(), paramList);
42914296
fn->setParameters(paramList);
42924297
auto numParams =
42934298
fn->hasImplicitSelfDecl() ? paramList->size() + 1 : paramList->size();
@@ -5020,7 +5025,8 @@ class DeclDeserializer {
50205025

50215026
// Read payload parameter list, if it exists.
50225027
if (hasPayload) {
5023-
auto *paramList = MF.readParameterList();
5028+
ParameterList *paramList;
5029+
UNWRAP(MF.readParameterList(), paramList);
50245030
elem->setParameterList(paramList);
50255031
}
50265032

@@ -5139,7 +5145,9 @@ class DeclDeserializer {
51395145

51405146
subscript->setGenericSignature(MF.getGenericSignature(genericSigID));
51415147

5142-
subscript->setIndices(MF.readParameterList());
5148+
ParameterList *paramList;
5149+
UNWRAP(MF.readParameterList(), paramList);
5150+
subscript->setIndices(paramList);
51435151

51445152
MF.configureStorage(subscript, opaqueReadOwnership,
51455153
readImpl, writeImpl, readWriteImpl, accessors);
@@ -5166,9 +5174,12 @@ class DeclDeserializer {
51665174
AddAttribute(new (ctx) OverrideAttr(SourceLoc()));
51675175

51685176
if (opaqueReturnTypeID) {
5177+
Decl *opaqueReturnType;
5178+
UNWRAP(MF.getDeclChecked(opaqueReturnTypeID), opaqueReturnType);
5179+
51695180
ctx.evaluator.cacheOutput(
51705181
OpaqueResultTypeRequest{subscript},
5171-
cast<OpaqueTypeDecl>(MF.getDecl(opaqueReturnTypeID)));
5182+
cast<OpaqueTypeDecl>(opaqueReturnType));
51725183
}
51735184

51745185
return subscript;
@@ -5380,8 +5391,9 @@ class DeclDeserializer {
53805391
macro->setGenericSignature(MF.getGenericSignature(genericSigID));
53815392
macro->resultType.setType(resultInterfaceType);
53825393

5383-
if (hasParameterList)
5384-
macro->parameterList = MF.readParameterList();
5394+
if (hasParameterList) {
5395+
UNWRAP(MF.readParameterList(), macro->parameterList);
5396+
}
53855397

53865398
if (auto accessLevel = getActualAccessLevel(rawAccessLevel))
53875399
macro->setAccess(*accessLevel);

lib/Serialization/ModuleFile.h

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

501-
ParameterList *readParameterList();
501+
llvm::Expected<ParameterList *> readParameterList();
502502

503503
/// Reads a generic param list from \c DeclTypeCursor.
504504
///

0 commit comments

Comments
 (0)