Skip to content

Commit 46da680

Browse files
committed
[Distributed] AST: Make sure that there is only one viable decodeNextArgument for a particular decoder
1 parent 80e6f50 commit 46da680

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

lib/Sema/TypeCheckDistributed.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,7 @@ GetDistributedActorArgumentDecodingMethodRequest::evaluate(Evaluator &evaluator,
472472
auto members = TypeChecker::lookupMember(actor->getDeclContext(), decoderTy,
473473
DeclNameRef(ctx.Id_decodeNextArgument));
474474

475+
SmallVector<FuncDecl *, 2> candidates;
475476
// Looking for `decodeNextArgument<Arg>() throws -> Arg`
476477
for (auto &member : members) {
477478
auto *FD = dyn_cast<FuncDecl>(member.getValueDecl());
@@ -489,9 +490,12 @@ GetDistributedActorArgumentDecodingMethodRequest::evaluate(Evaluator &evaluator,
489490
->getMetatypeInstanceType();
490491

491492
if (FD->getResultInterfaceType()->isEqual(paramTy))
492-
return FD;
493+
candidates.push_back(FD);
493494
}
494495
}
495496

496-
return nullptr;
497+
// Type-checker should reject any definition of invocation decoder
498+
// that doesn't have a correct version of `decodeNextArgument` declared.
499+
assert(candidates.size() == 1);
500+
return candidates.front();
497501
}

0 commit comments

Comments
 (0)