Skip to content

Commit dedaa3a

Browse files
committed
Serialization: Bubble up errors under readParameterList
rdar://131002388
1 parent 0816496 commit dedaa3a

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
@@ -509,7 +509,7 @@ getActualClangDeclPathComponentKind(uint64_t raw) {
509509
return std::nullopt;
510510
}
511511

512-
ParameterList *ModuleFile::readParameterList() {
512+
Expected<ParameterList *> ModuleFile::readParameterList() {
513513
using namespace decls_block;
514514

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

526526
SmallVector<ParamDecl *, 8> params;
527-
for (DeclID paramID : rawMemberIDs)
528-
params.push_back(cast<ParamDecl>(getDecl(paramID)));
527+
for (DeclID paramID : rawMemberIDs) {
528+
Decl *param;
529+
UNWRAP(getDeclChecked(paramID), param);
530+
params.push_back(cast<ParamDecl>(param));
531+
}
529532

530533
return ParameterList::create(getContext(), params);
531534
}
@@ -3670,7 +3673,8 @@ class DeclDeserializer {
36703673
else
36713674
return MF.diagnoseFatal();
36723675

3673-
auto *bodyParams = MF.readParameterList();
3676+
ParameterList *bodyParams;
3677+
UNWRAP(MF.readParameterList(), bodyParams);
36743678
assert(bodyParams && "missing parameters for constructor");
36753679
ctor->setParameters(bodyParams);
36763680

@@ -4254,7 +4258,8 @@ class DeclDeserializer {
42544258
fn->setStatic(isStatic);
42554259
fn->setImplicitlyUnwrappedOptional(isIUO);
42564260

4257-
ParameterList *paramList = MF.readParameterList();
4261+
ParameterList *paramList;
4262+
UNWRAP(MF.readParameterList(), paramList);
42584263
fn->setParameters(paramList);
42594264

42604265
auto lifetimeDependenceInfo = MF.maybeReadLifetimeDependenceInfo(
@@ -4982,7 +4987,8 @@ class DeclDeserializer {
49824987

49834988
// Read payload parameter list, if it exists.
49844989
if (hasPayload) {
4985-
auto *paramList = MF.readParameterList();
4990+
ParameterList *paramList;
4991+
UNWRAP(MF.readParameterList(), paramList);
49864992
elem->setParameterList(paramList);
49874993
}
49884994

@@ -5101,7 +5107,9 @@ class DeclDeserializer {
51015107

51025108
subscript->setGenericSignature(MF.getGenericSignature(genericSigID));
51035109

5104-
subscript->setIndices(MF.readParameterList());
5110+
ParameterList *paramList;
5111+
UNWRAP(MF.readParameterList(), paramList);
5112+
subscript->setIndices(paramList);
51055113

51065114
MF.configureStorage(subscript, opaqueReadOwnership,
51075115
readImpl, writeImpl, readWriteImpl, accessors);
@@ -5128,9 +5136,12 @@ class DeclDeserializer {
51285136
AddAttribute(new (ctx) OverrideAttr(SourceLoc()));
51295137

51305138
if (opaqueReturnTypeID) {
5139+
Decl *opaqueReturnType;
5140+
UNWRAP(MF.getDeclChecked(opaqueReturnTypeID), opaqueReturnType);
5141+
51315142
ctx.evaluator.cacheOutput(
51325143
OpaqueResultTypeRequest{subscript},
5133-
cast<OpaqueTypeDecl>(MF.getDecl(opaqueReturnTypeID)));
5144+
cast<OpaqueTypeDecl>(opaqueReturnType));
51345145
}
51355146

51365147
return subscript;
@@ -5342,8 +5353,9 @@ class DeclDeserializer {
53425353
macro->setGenericSignature(MF.getGenericSignature(genericSigID));
53435354
macro->resultType.setType(resultInterfaceType);
53445355

5345-
if (hasParameterList)
5346-
macro->parameterList = MF.readParameterList();
5356+
if (hasParameterList) {
5357+
UNWRAP(MF.readParameterList(), macro->parameterList);
5358+
}
53475359

53485360
if (auto accessLevel = getActualAccessLevel(rawAccessLevel))
53495361
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)