Skip to content

Commit ff7a78d

Browse files
authored
Merge pull request #41300 from DougGregor/remote-distributed-actor-instance-isolation
Remove ActorIsolation::DistributedActorInstance.
2 parents c6c88ce + a37f291 commit ff7a78d

12 files changed

+16
-80
lines changed

include/swift/AST/ActorIsolation.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,6 @@ class ActorIsolation {
5555
/// For example, a mutable stored property or synchronous function within
5656
/// the actor is isolated to the instance of that actor.
5757
ActorInstance,
58-
/// The declaration is isolated to a (potentially) distributed actor.
59-
/// Distributed actors may access _their_ state (same as 'ActorInstance')
60-
/// however others may not access any properties on other distributed actors.
61-
DistributedActorInstance,
6258
/// The declaration is explicitly specified to be independent of any actor,
6359
/// meaning that it can be used from any actor but is also unable to
6460
/// refer to the isolated state of any given actor.
@@ -99,10 +95,6 @@ class ActorIsolation {
9995
return ActorIsolation(ActorInstance, actor);
10096
}
10197

102-
static ActorIsolation forDistributedActorInstance(NominalTypeDecl *actor) {
103-
return ActorIsolation(DistributedActorInstance, actor);
104-
}
105-
10698
static ActorIsolation forGlobalActor(Type globalActor, bool unsafe) {
10799
return ActorIsolation(
108100
unsafe ? GlobalActorUnsafe : GlobalActor, globalActor);
@@ -117,7 +109,7 @@ class ActorIsolation {
117109
bool isIndependent() const { return kind == Independent; }
118110

119111
NominalTypeDecl *getActor() const {
120-
assert(getKind() == ActorInstance || getKind() == DistributedActorInstance);
112+
assert(getKind() == ActorInstance);
121113
return actor;
122114
}
123115

@@ -151,7 +143,6 @@ class ActorIsolation {
151143
return true;
152144

153145
case ActorInstance:
154-
case DistributedActorInstance:
155146
return lhs.actor == rhs.actor;
156147

157148
case GlobalActor:

lib/AST/Decl.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2013,14 +2013,13 @@ static bool deferMatchesEnclosingAccess(const FuncDecl *defer) {
20132013
return true;
20142014

20152015
switch (getActorIsolation(type)) {
2016-
case swift::ActorIsolation::Unspecified:
2017-
case swift::ActorIsolation::GlobalActorUnsafe:
2016+
case ActorIsolation::Unspecified:
2017+
case ActorIsolation::GlobalActorUnsafe:
20182018
break;
20192019

2020-
case swift::ActorIsolation::ActorInstance:
2021-
case swift::ActorIsolation::DistributedActorInstance:
2022-
case swift::ActorIsolation::Independent:
2023-
case swift::ActorIsolation::GlobalActor:
2020+
case ActorIsolation::ActorInstance:
2021+
case ActorIsolation::Independent:
2022+
case ActorIsolation::GlobalActor:
20242023
return true;
20252024
}
20262025
}

lib/AST/DiagnosticEngine.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -832,10 +832,6 @@ static void formatDiagnosticArgument(StringRef Modifier,
832832
Out << "actor-isolated";
833833
break;
834834

835-
case ActorIsolation::DistributedActorInstance:
836-
Out << "distributed actor-isolated";
837-
break;
838-
839835
case ActorIsolation::GlobalActor:
840836
case ActorIsolation::GlobalActorUnsafe: {
841837
Type globalActor = isolation.getGlobalActor();

lib/AST/TypeCheckRequests.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1488,7 +1488,6 @@ void CustomAttrTypeRequest::cacheResult(Type value) const {
14881488
bool ActorIsolation::requiresSubstitution() const {
14891489
switch (kind) {
14901490
case ActorInstance:
1491-
case DistributedActorInstance:
14921491
case Independent:
14931492
case Unspecified:
14941493
return false;
@@ -1503,7 +1502,6 @@ bool ActorIsolation::requiresSubstitution() const {
15031502
ActorIsolation ActorIsolation::subst(SubstitutionMap subs) const {
15041503
switch (kind) {
15051504
case ActorInstance:
1506-
case DistributedActorInstance:
15071505
case Independent:
15081506
case Unspecified:
15091507
return *this;
@@ -1523,10 +1521,6 @@ void swift::simple_display(
15231521
out << "actor-isolated to instance of " << state.getActor()->getName();
15241522
break;
15251523

1526-
case ActorIsolation::DistributedActorInstance:
1527-
out << "distributed-actor-isolated to instance of " << state.getActor()->getName();
1528-
break;
1529-
15301524
case ActorIsolation::Independent:
15311525
out << "actor-independent";
15321526
break;

lib/IDE/CodeCompletion.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2627,11 +2627,8 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
26272627
auto isolation = getActorIsolation(const_cast<ValueDecl *>(VD));
26282628

26292629
switch (isolation.getKind()) {
2630-
case ActorIsolation::DistributedActorInstance: {
2631-
// TODO: implicitlyThrowing here for distributed
2632-
LLVM_FALLTHROUGH; // continue the ActorInstance checks
2633-
}
26342630
case ActorIsolation::ActorInstance: {
2631+
// TODO: implicitlyThrowing here for distributed
26352632
if (IsCrossActorReference) {
26362633
implicitlyAsync = true;
26372634
// TODO: 'NotRecommended' if this is a r-value reference.

lib/SILGen/SILGenConstructor.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,6 @@ static bool ctorHopsInjectedByDefiniteInit(ConstructorDecl *ctor,
343343
// must be instance isolated
344344
switch (isolation) {
345345
case ActorIsolation::ActorInstance:
346-
case ActorIsolation::DistributedActorInstance:
347346
return true;
348347

349348
case ActorIsolation::Unspecified:

lib/SILGen/SILGenDistributed.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,7 @@ void SILGenFunction::emitDistributedActorClassMemberDestruction(
568568
B.emitBlock(remoteMemberDestroyBB);
569569

570570
for (VarDecl *vd : cd->getStoredProperties()) {
571-
if (getActorIsolation(vd) == ActorIsolation::DistributedActorInstance)
571+
if (getActorIsolation(vd) == ActorIsolation::ActorInstance)
572572
continue;
573573

574574
destroyClassMember(cleanupLoc, selfValue, vd);

lib/SILGen/SILGenProlog.cpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,6 @@ void SILGenFunction::emitProlog(CaptureInfo captureInfo,
532532
if (auto destructor = dyn_cast<DestructorDecl>(dc)) {
533533
switch (getActorIsolation(destructor)) {
534534
case ActorIsolation::ActorInstance:
535-
case ActorIsolation::DistributedActorInstance:
536535
return true;
537536

538537
case ActorIsolation::GlobalActor:
@@ -601,11 +600,6 @@ void SILGenFunction::emitProlog(CaptureInfo captureInfo,
601600
}
602601
break;
603602

604-
case ActorIsolation::DistributedActorInstance: {
605-
// TODO: perhaps here we can emit our special handling to make a message?
606-
LLVM_FALLTHROUGH;
607-
}
608-
609603
case ActorIsolation::ActorInstance: {
610604
// Only produce an executor for actor-isolated functions that are async
611605
// or are local functions. The former require a hop, while the latter
@@ -804,8 +798,7 @@ Optional<SILValue> SILGenFunction::emitExecutor(
804798
case ActorIsolation::Independent:
805799
return None;
806800

807-
case ActorIsolation::ActorInstance:
808-
case ActorIsolation::DistributedActorInstance: {
801+
case ActorIsolation::ActorInstance: {
809802
// "self" here means the actor instance's "self" value.
810803
assert(maybeSelf.hasValue() && "actor-instance but no self provided?");
811804
auto self = maybeSelf.getValue();

lib/SILOptimizer/Mandatory/DefiniteInitialization.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -925,7 +925,6 @@ void LifetimeChecker::injectActorHops() {
925925
// Must be an initializer that is isolated to self.
926926
switch (getActorIsolation(ctor)) {
927927
case ActorIsolation::ActorInstance:
928-
case ActorIsolation::DistributedActorInstance:
929928
break;
930929

931930
case ActorIsolation::Unspecified:

lib/Sema/TypeCheckConcurrency.cpp

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ static bool requiresFlowIsolation(ActorIsolation typeIso,
107107
return false;
108108

109109
case ActorIsolation::ActorInstance:
110-
case ActorIsolation::DistributedActorInstance:
111110
return !(ctor->hasAsync()); // need flow-isolation for non-async.
112111
};
113112
}
@@ -137,10 +136,7 @@ bool swift::usesFlowSensitiveIsolation(AbstractFunctionDecl const *fn) {
137136
return true;
138137

139138
// construct an isolation corresponding to the type.
140-
auto actorTypeIso =
141-
nominal->isDistributedActor()
142-
? ActorIsolation::forDistributedActorInstance(nominal)
143-
: ActorIsolation::forActorInstance(nominal);
139+
auto actorTypeIso = ActorIsolation::forActorInstance(nominal);
144140

145141
return requiresFlowIsolation(actorTypeIso, cast<ConstructorDecl>(fn));
146142
}
@@ -519,10 +515,6 @@ ActorIsolationRestriction ActorIsolationRestriction::forDeclaration(
519515
return forActorSelf(isolation.getActor(),
520516
isAccessibleAcrossActors || isa<ConstructorDecl>(decl));
521517

522-
case ActorIsolation::DistributedActorInstance:
523-
return forDistributedActorSelf(isolation.getActor(),
524-
/*isCrossActor*/ isAccessibleAcrossActors || isa<ConstructorDecl>(decl));
525-
526518
case ActorIsolation::GlobalActorUnsafe:
527519
case ActorIsolation::GlobalActor: {
528520
// A global-actor-isolated function referenced within an expression
@@ -1885,7 +1877,6 @@ namespace {
18851877
var, isPotentiallyIsolated, isolation.getGlobalActor());
18861878

18871879
case ActorIsolation::ActorInstance:
1888-
case ActorIsolation::DistributedActorInstance:
18891880
break;
18901881
}
18911882
}
@@ -1928,7 +1919,6 @@ namespace {
19281919
(!fn->isAsyncContext() || fn != dc)) {
19291920
switch (getActorIsolation(fn)) {
19301921
case ActorIsolation::ActorInstance:
1931-
case ActorIsolation::DistributedActorInstance:
19321922
case ActorIsolation::GlobalActor:
19331923
case ActorIsolation::GlobalActorUnsafe:
19341924
case ActorIsolation::Independent:
@@ -2113,7 +2103,6 @@ namespace {
21132103
// Retrieve the actor isolation of the context.
21142104
switch (auto isolation = getActorIsolationOfContext(dc)) {
21152105
case ActorIsolation::ActorInstance:
2116-
case ActorIsolation::DistributedActorInstance:
21172106
case ActorIsolation::Independent:
21182107
case ActorIsolation::Unspecified:
21192108
return isolation;
@@ -2375,7 +2364,6 @@ namespace {
23752364
unsatisfiedIsolation->getGlobalActor()));
23762365
break;
23772366

2378-
case ActorIsolation::DistributedActorInstance:
23792367
case ActorIsolation::ActorInstance:
23802368
apply->setImplicitlyAsync(
23812369
ImplicitActorHopTarget::forIsolatedParameter(*isolatedParamIdx));
@@ -2454,7 +2442,6 @@ namespace {
24542442

24552443
// Diagnose failures.
24562444
switch (contextIsolation) {
2457-
case ActorIsolation::DistributedActorInstance:
24582445
case ActorIsolation::ActorInstance: {
24592446
auto useKind = static_cast<unsigned>(
24602447
kindOfUsage(value, context).getValueOr(VarRefUseEnv::Read));
@@ -2988,8 +2975,7 @@ namespace {
29882975
return ClosureActorIsolation::forGlobalActor(globalActorType);
29892976
}
29902977

2991-
case ActorIsolation::ActorInstance:
2992-
case ActorIsolation::DistributedActorInstance: {
2978+
case ActorIsolation::ActorInstance: {
29932979
if (auto param = closure->getCaptureInfo().getIsolatedParamCapture())
29942980
return ClosureActorIsolation::forActorInstance(param);
29952981

@@ -3199,7 +3185,6 @@ static Optional<ActorIsolation> getIsolationFromWitnessedRequirements(
31993185
auto requirementIsolation = getActorIsolation(requirement);
32003186
switch (requirementIsolation) {
32013187
case ActorIsolation::ActorInstance:
3202-
case ActorIsolation::DistributedActorInstance:
32033188
case ActorIsolation::Unspecified:
32043189
continue;
32053190

@@ -3227,7 +3212,6 @@ static Optional<ActorIsolation> getIsolationFromWitnessedRequirements(
32273212
auto isolation = std::get<1>(isolated);
32283213
switch (isolation) {
32293214
case ActorIsolation::ActorInstance:
3230-
case ActorIsolation::DistributedActorInstance:
32313215
llvm_unreachable("protocol requirements cannot be actor instances");
32323216

32333217
case ActorIsolation::Independent:
@@ -3279,7 +3263,6 @@ static Optional<ActorIsolation> getIsolationFromConformances(
32793263
nominal->getLocalProtocols(ConformanceLookupKind::NonStructural)) {
32803264
switch (auto protoIsolation = getActorIsolation(proto)) {
32813265
case ActorIsolation::ActorInstance:
3282-
case ActorIsolation::DistributedActorInstance:
32833266
case ActorIsolation::Unspecified:
32843267
case ActorIsolation::Independent:
32853268
break;
@@ -3330,7 +3313,6 @@ static Optional<ActorIsolation> getIsolationFromWrappers(
33303313

33313314
switch (isolation) {
33323315
case ActorIsolation::ActorInstance:
3333-
case ActorIsolation::DistributedActorInstance:
33343316
case ActorIsolation::Unspecified:
33353317
case ActorIsolation::Independent:
33363318
break;
@@ -3519,7 +3501,6 @@ static bool checkClassGlobalActorIsolation(
35193501
return false;
35203502

35213503
case ActorIsolation::ActorInstance:
3522-
case ActorIsolation::DistributedActorInstance:
35233504
// This is an error that will be diagnosed later. Ignore it here.
35243505
return false;
35253506

@@ -3553,9 +3534,7 @@ ActorIsolation ActorIsolationRequest::evaluate(
35533534
if (evaluateOrDefault(evaluator, HasIsolatedSelfRequest{value}, false)) {
35543535
auto actor = value->getDeclContext()->getSelfNominalTypeDecl();
35553536
assert(actor && "could not find the actor that 'self' is isolated to");
3556-
return actor->isDistributedActor()
3557-
? ActorIsolation::forDistributedActorInstance(actor)
3558-
: ActorIsolation::forActorInstance(actor);
3537+
return ActorIsolation::forActorInstance(actor);
35593538
}
35603539

35613540
auto isolationFromAttr = getIsolationFromAttributes(value);
@@ -3647,7 +3626,6 @@ ActorIsolation ActorIsolationRequest::evaluate(
36473626
break;
36483627
}
36493628

3650-
case ActorIsolation::DistributedActorInstance:
36513629
case ActorIsolation::ActorInstance:
36523630
case ActorIsolation::Unspecified:
36533631
if (onlyGlobal)
@@ -3680,7 +3658,6 @@ ActorIsolation ActorIsolationRequest::evaluate(
36803658
break;
36813659

36823660
case ActorIsolation::ActorInstance:
3683-
case ActorIsolation::DistributedActorInstance:
36843661
if (auto param = func->getCaptureInfo().getIsolatedParamCapture())
36853662
return inferredIsolation(enclosingIsolation);
36863663
break;
@@ -3860,7 +3837,6 @@ bool HasIsolatedSelfRequest::evaluate(
38603837
return false;
38613838

38623839
case ActorIsolation::ActorInstance:
3863-
case ActorIsolation::DistributedActorInstance:
38643840
if (isolation.getActor() != selfTypeDecl)
38653841
return false;
38663842
break;
@@ -3919,8 +3895,7 @@ void swift::checkOverrideActorIsolation(ValueDecl *value) {
39193895
// the equality case above because the nominal type describing the actor
39203896
// will differ when we're overriding.
39213897
if (isolation.getKind() == overriddenIsolation.getKind() &&
3922-
(isolation.getKind() == ActorIsolation::ActorInstance ||
3923-
isolation.getKind() == ActorIsolation::DistributedActorInstance))
3898+
isolation.getKind() == ActorIsolation::ActorInstance)
39243899
return;
39253900

39263901
// If the overridden declaration is from Objective-C with no actor annotation,
@@ -4171,7 +4146,6 @@ bool swift::checkSendableConformance(
41714146
switch (getActorIsolation(nominal)) {
41724147
case ActorIsolation::Unspecified:
41734148
case ActorIsolation::ActorInstance:
4174-
case ActorIsolation::DistributedActorInstance:
41754149
case ActorIsolation::Independent:
41764150
break;
41774151

@@ -4574,7 +4548,6 @@ AnyFunctionType *swift::adjustFunctionTypeForConcurrency(
45744548
if (decl) {
45754549
switch (auto isolation = getActorIsolation(decl)) {
45764550
case ActorIsolation::ActorInstance:
4577-
case ActorIsolation::DistributedActorInstance:
45784551
case ActorIsolation::Independent:
45794552
case ActorIsolation::Unspecified:
45804553
return fnType;

lib/Sema/TypeCheckPropertyWrapper.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ static VarDecl *findValueProperty(ASTContext &ctx, NominalTypeDecl *nominal,
8989
// The property must not be isolated to an actor instance.
9090
switch (auto isolation = getActorIsolation(var)) {
9191
case ActorIsolation::ActorInstance:
92-
case ActorIsolation::DistributedActorInstance:
9392
var->diagnose(
9493
diag::actor_instance_property_wrapper, var->getName(),
9594
nominal->getName());

lib/Sema/TypeCheckProtocol.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2937,12 +2937,13 @@ bool ConformanceChecker::checkActorIsolation(
29372937

29382938
// An actor-isolated witness can only conform to an actor-isolated
29392939
// requirement.
2940-
if (requirementIsolation == ActorIsolation::ActorInstance) {
2940+
auto requirementFunc = dyn_cast<AbstractFunctionDecl>(requirement);
2941+
if (requirementIsolation == ActorIsolation::ActorInstance &&
2942+
!(requirementFunc && requirementFunc->isDistributed())) {
29412943
return false;
29422944
}
29432945

29442946
auto witnessFunc = dyn_cast<AbstractFunctionDecl>(witness);
2945-
auto requirementFunc = dyn_cast<AbstractFunctionDecl>(requirement);
29462947
auto nominal = dyn_cast<NominalTypeDecl>(witness->getDeclContext());
29472948
auto witnessClass = dyn_cast<ClassDecl>(witness->getDeclContext());
29482949
if (auto extension = dyn_cast<ExtensionDecl>(witness->getDeclContext())) {
@@ -3170,11 +3171,6 @@ bool ConformanceChecker::checkActorIsolation(
31703171
switch (auto requirementIsolation = getActorIsolation(requirement)) {
31713172
case ActorIsolation::ActorInstance:
31723173
llvm_unreachable("There are not actor protocols");
3173-
case ActorIsolation::DistributedActorInstance:
3174-
// A requirement inside a distributed actor, where it has a protocol that was
3175-
// bound requiring a `DistributedActor` conformance (`protocol D: DistributedActor`),
3176-
// results in the requirement being isolated to given distributed actor.
3177-
break;
31783174

31793175
case ActorIsolation::GlobalActorUnsafe:
31803176
requirementIsUnsafe = true;

0 commit comments

Comments
 (0)