Skip to content

Commit fc7ecc8

Browse files
committed
[Distributed] Harden typechecker against completely empty DAS types
1 parent df71ee0 commit fc7ecc8

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

lib/AST/ASTContext.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1397,6 +1397,9 @@ FuncDecl *ASTContext::getMakeInvocationEncoderOnDistributedActorSystem(
13971397
FuncDecl *
13981398
ASTContext::getRecordGenericSubstitutionOnDistributedInvocationEncoder(
13991399
NominalTypeDecl *nominal) const {
1400+
if (!nominal)
1401+
return nullptr;
1402+
14001403
for (auto result : nominal->lookupDirect(Id_recordGenericSubstitution)) {
14011404
auto *func = dyn_cast<FuncDecl>(result);
14021405
if (func &&
@@ -1410,6 +1413,9 @@ ASTContext::getRecordGenericSubstitutionOnDistributedInvocationEncoder(
14101413

14111414
AbstractFunctionDecl *ASTContext::getRecordArgumentOnDistributedInvocationEncoder(
14121415
NominalTypeDecl *nominal) const {
1416+
if (!nominal)
1417+
return nullptr;
1418+
14131419
return evaluateOrDefault(
14141420
nominal->getASTContext().evaluator,
14151421
GetDistributedTargetInvocationEncoderRecordArgumentFunctionRequest{nominal},
@@ -1418,6 +1424,9 @@ AbstractFunctionDecl *ASTContext::getRecordArgumentOnDistributedInvocationEncode
14181424

14191425
AbstractFunctionDecl *ASTContext::getRecordReturnTypeOnDistributedInvocationEncoder(
14201426
NominalTypeDecl *nominal) const {
1427+
if (!nominal)
1428+
return nullptr;
1429+
14211430
return evaluateOrDefault(
14221431
nominal->getASTContext().evaluator,
14231432
GetDistributedTargetInvocationEncoderRecordReturnTypeFunctionRequest{nominal},
@@ -1426,6 +1435,9 @@ AbstractFunctionDecl *ASTContext::getRecordReturnTypeOnDistributedInvocationEnco
14261435

14271436
AbstractFunctionDecl *ASTContext::getRecordErrorTypeOnDistributedInvocationEncoder(
14281437
NominalTypeDecl *nominal) const {
1438+
if (!nominal)
1439+
return nullptr;
1440+
14291441
return evaluateOrDefault(
14301442
nominal->getASTContext().evaluator,
14311443
GetDistributedTargetInvocationEncoderRecordErrorTypeFunctionRequest{nominal},
@@ -1434,6 +1446,9 @@ AbstractFunctionDecl *ASTContext::getRecordErrorTypeOnDistributedInvocationEncod
14341446

14351447
AbstractFunctionDecl *ASTContext::getDecodeNextArgumentOnDistributedInvocationDecoder(
14361448
NominalTypeDecl *nominal) const {
1449+
if (!nominal)
1450+
return nullptr;
1451+
14371452
return evaluateOrDefault(
14381453
nominal->getASTContext().evaluator,
14391454
GetDistributedTargetInvocationDecoderDecodeNextArgumentFunctionRequest{nominal},
@@ -1442,6 +1457,9 @@ AbstractFunctionDecl *ASTContext::getDecodeNextArgumentOnDistributedInvocationDe
14421457

14431458
AbstractFunctionDecl *ASTContext::getOnReturnOnDistributedTargetInvocationResultHandler(
14441459
NominalTypeDecl *nominal) const {
1460+
if (!nominal)
1461+
return nullptr;
1462+
14451463
return evaluateOrDefault(
14461464
nominal->getASTContext().evaluator,
14471465
GetDistributedTargetInvocationResultHandlerOnReturnFunctionRequest{nominal},

test/Distributed/distributed_imcomplete_system_dont_crash.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,12 @@ public final class CompletelyHollowActorSystem: DistributedActorSystem {
3636
// expected-error@-1{{type 'CompletelyHollowActorSystem.ResultHandler' does not conform to protocol 'DistributedTargetInvocationResultHandler'}}
3737
}
3838

39+
}
40+
41+
public final class CompletelyHollowActorSystem_NotEvenTypes: DistributedActorSystem {
42+
// expected-error@-1{{type 'CompletelyHollowActorSystem_NotEvenTypes' does not conform to protocol 'DistributedActorSystem'}}
43+
// expected-error@-2{{class 'CompletelyHollowActorSystem_NotEvenTypes' is missing witness for protocol requirement 'remoteCallVoid'}}
44+
// expected-error@-3{{class 'CompletelyHollowActorSystem_NotEvenTypes' is missing witness for protocol requirement 'remoteCall'}}
45+
// expected-note@-4{{protocol 'DistributedActorSystem' requires function 'remoteCall' with signature:}}
46+
// expected-note@-5{{protocol 'DistributedActorSystem' requires function 'remoteCallVoid' with signature:}}
3947
}

0 commit comments

Comments
 (0)