Skip to content

Commit 543b1e6

Browse files
committed
[concurrency] Make ActorIsolation::Nonisolated -> CallerIsolationInheriting and delete CallerIsolationInheriting.
1 parent 0cb6463 commit 543b1e6

20 files changed

+23
-117
lines changed

include/swift/AST/ActorIsolation.h

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,6 @@ class ActorIsolation {
8080
/// The actor isolation iss statically erased, as for a call to
8181
/// an isolated(any) function. This is not possible for declarations.
8282
Erased,
83-
/// Inherits isolation from the caller of the given function.
84-
///
85-
/// DISCUSSION: This is used for nonisolated asynchronous functions that we
86-
/// want to inherit from their context the context's actor isolation.
87-
CallerIsolationInheriting,
8883
/// The declaration is explicitly specified to be not isolated to any actor,
8984
/// meaning that it can be used from any actor but is also unable to
9085
/// refer to the isolated state of any given actor.
@@ -107,7 +102,7 @@ class ActorIsolation {
107102
Type globalActor;
108103
void *pointer;
109104
};
110-
unsigned kind : 4;
105+
unsigned kind : 3;
111106
unsigned isolatedByPreconcurrency : 1;
112107

113108
/// Set to true if this was parsed from SIL.
@@ -141,12 +136,6 @@ class ActorIsolation {
141136
return ActorIsolation(unsafe ? ConcurrentUnsafe : Concurrent);
142137
}
143138

144-
static ActorIsolation forCallerIsolationInheriting() {
145-
// NOTE: We do not use parameter indices since the parameter is implicit
146-
// from the perspective of the AST.
147-
return ActorIsolation(CallerIsolationInheriting);
148-
}
149-
150139
static ActorIsolation forActorInstanceSelf(ValueDecl *decl);
151140

152141
/// Create an ActorIsolation appropriate for a type that is self.
@@ -194,9 +183,6 @@ class ActorIsolation {
194183
std::optional<ActorIsolation>(ActorIsolation::GlobalActor))
195184
.Case("global_actor_unsafe",
196185
std::optional<ActorIsolation>(ActorIsolation::GlobalActor))
197-
.Case("caller_isolation_inheriting",
198-
std::optional<ActorIsolation>(
199-
ActorIsolation::CallerIsolationInheriting))
200186
.Case("concurrent",
201187
std::optional<ActorIsolation>(ActorIsolation::Concurrent))
202188
.Case("concurrent_unsafe", std::optional<ActorIsolation>(
@@ -255,7 +241,6 @@ class ActorIsolation {
255241
case Unspecified:
256242
case Nonisolated:
257243
case NonisolatedUnsafe:
258-
case CallerIsolationInheriting:
259244
case Concurrent:
260245
case ConcurrentUnsafe:
261246
return false;

lib/AST/ASTDumper.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3859,10 +3859,6 @@ class PrintExpr : public ExprVisitor<PrintExpr, void, Label>,
38593859
printFlag(true, "dynamically_isolated", CapturesColor);
38603860
break;
38613861

3862-
case ActorIsolation::CallerIsolationInheriting:
3863-
printFlag(true, "isolated_to_caller_isolation", CapturesColor);
3864-
break;
3865-
38663862
case ActorIsolation::ActorInstance:
38673863
printReferencedDeclWithContextField(isolation.getActorInstance(),
38683864
Label::always("actor_isolated"),

lib/AST/ActorIsolation.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,6 @@ bool ActorIsolation::isEqual(const ActorIsolation &lhs,
165165
return false;
166166

167167
switch (lhs.getKind()) {
168-
case Nonisolated:
169-
case NonisolatedUnsafe:
170168
case Concurrent:
171169
case ConcurrentUnsafe:
172170
case Unspecified:
@@ -179,7 +177,8 @@ bool ActorIsolation::isEqual(const ActorIsolation &lhs,
179177
// to answer.
180178
return false;
181179

182-
case CallerIsolationInheriting:
180+
case Nonisolated:
181+
case NonisolatedUnsafe:
183182
// This returns false for the same reason as erased. The caller has to check
184183
// against the actual caller isolation.
185184
return false;

lib/AST/Decl.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2766,7 +2766,6 @@ static bool deferMatchesEnclosingAccess(const FuncDecl *defer) {
27662766

27672767
return true;
27682768

2769-
case ActorIsolation::CallerIsolationInheriting:
27702769
case ActorIsolation::ActorInstance:
27712770
case ActorIsolation::Nonisolated:
27722771
case ActorIsolation::Concurrent:
@@ -11464,7 +11463,6 @@ bool VarDecl::isSelfParamCaptureIsolated() const {
1146411463
case ActorIsolation::ConcurrentUnsafe:
1146511464
case ActorIsolation::GlobalActor:
1146611465
case ActorIsolation::Erased:
11467-
case ActorIsolation::CallerIsolationInheriting:
1146811466
return false;
1146911467

1147011468
case ActorIsolation::ActorInstance:

lib/AST/TypeCheckRequests.cpp

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1856,7 +1856,6 @@ SourceLoc MacroDefinitionRequest::getNearestLoc() const {
18561856

18571857
bool ActorIsolation::requiresSubstitution() const {
18581858
switch (kind) {
1859-
case CallerIsolationInheriting:
18601859
case ActorInstance:
18611860
case Nonisolated:
18621861
case NonisolatedUnsafe:
@@ -1874,7 +1873,6 @@ bool ActorIsolation::requiresSubstitution() const {
18741873
ActorIsolation ActorIsolation::subst(SubstitutionMap subs) const {
18751874
switch (kind) {
18761875
case ActorInstance:
1877-
case CallerIsolationInheriting:
18781876
case Nonisolated:
18791877
case NonisolatedUnsafe:
18801878
case Concurrent:
@@ -1897,11 +1895,6 @@ void ActorIsolation::printForDiagnostics(llvm::raw_ostream &os,
18971895
os << "actor" << (asNoun ? " isolation" : "-isolated");
18981896
break;
18991897

1900-
case ActorIsolation::CallerIsolationInheriting:
1901-
os << "caller isolation inheriting"
1902-
<< (asNoun ? " isolation" : "-isolated");
1903-
break;
1904-
19051898
case ActorIsolation::GlobalActor: {
19061899
if (isMainActor()) {
19071900
os << "main actor" << (asNoun ? " isolation" : "-isolated");
@@ -1940,9 +1933,6 @@ void ActorIsolation::print(llvm::raw_ostream &os) const {
19401933
os << ". name: '" << vd->getBaseIdentifier() << "'";
19411934
}
19421935
return;
1943-
case CallerIsolationInheriting:
1944-
os << "caller_isolation_inheriting";
1945-
return;
19461936
case Nonisolated:
19471937
os << "nonisolated";
19481938
return;
@@ -1973,9 +1963,6 @@ void ActorIsolation::printForSIL(llvm::raw_ostream &os) const {
19731963
case ActorInstance:
19741964
os << "actor_instance";
19751965
return;
1976-
case CallerIsolationInheriting:
1977-
os << "caller_isolation_inheriting";
1978-
return;
19791966
case Nonisolated:
19801967
os << "nonisolated";
19811968
return;
@@ -2027,10 +2014,6 @@ void swift::simple_display(
20272014
}
20282015
break;
20292016

2030-
case ActorIsolation::CallerIsolationInheriting:
2031-
out << "isolated to isolation of caller";
2032-
break;
2033-
20342017
case ActorIsolation::Nonisolated:
20352018
case ActorIsolation::NonisolatedUnsafe:
20362019
case ActorIsolation::Concurrent:

lib/IDE/CompletionLookup.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -830,7 +830,6 @@ void CompletionLookup::analyzeActorIsolation(
830830
case ActorIsolation::NonisolatedUnsafe:
831831
case ActorIsolation::Concurrent:
832832
case ActorIsolation::ConcurrentUnsafe:
833-
case ActorIsolation::CallerIsolationInheriting:
834833
return;
835834
}
836835
}

lib/SIL/IR/SILFunctionType.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1651,8 +1651,7 @@ class DestructureInputs {
16511651
// enabled.
16521652
if (TC.Context.LangOpts.hasFeature(
16531653
Feature::NonIsolatedAsyncInheritsIsolationFromContext) &&
1654-
IsolationInfo &&
1655-
IsolationInfo->getKind() == ActorIsolation::CallerIsolationInheriting &&
1654+
IsolationInfo && IsolationInfo->isNonisolated() &&
16561655
extInfoBuilder.isAsync()) {
16571656
auto actorProtocol = TC.Context.getProtocol(KnownProtocolKind::Actor);
16581657
auto actorType =
@@ -2538,7 +2537,7 @@ static CanSILFunctionType getSILFunctionType(
25382537
actorIsolation = ActorIsolation::forConcurrent(false /*unsafe*/);
25392538
break;
25402539
case ExecutionKind::Caller:
2541-
actorIsolation = ActorIsolation::forCallerIsolationInheriting();
2540+
actorIsolation = ActorIsolation::forNonisolated(false /*unsafe*/);
25422541
break;
25432542
}
25442543
} else {

lib/SILGen/SILGenApply.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3107,7 +3107,6 @@ static void emitDelayedArguments(SILGenFunction &SGF,
31073107
case ActorIsolation::NonisolatedUnsafe:
31083108
case ActorIsolation::Concurrent:
31093109
case ActorIsolation::ConcurrentUnsafe:
3110-
case ActorIsolation::CallerIsolationInheriting:
31113110
llvm_unreachable("Not isolated");
31123111
}
31133112

@@ -5837,7 +5836,6 @@ RValue SILGenFunction::emitApply(
58375836
case ActorIsolation::NonisolatedUnsafe:
58385837
case ActorIsolation::Concurrent:
58395838
case ActorIsolation::ConcurrentUnsafe:
5840-
case ActorIsolation::CallerIsolationInheriting:
58415839
llvm_unreachable("Not isolated");
58425840
break;
58435841
}

lib/SILGen/SILGenConcurrency.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ setExpectedExecutorForParameterIsolation(SILGenFunction &SGF,
7373

7474
// If we have caller isolation inheriting... just grab from our isolated
7575
// argument.
76-
if (actorIsolation.getKind() == ActorIsolation::CallerIsolationInheriting) {
76+
if (actorIsolation.isNonisolated()) {
7777
if (auto *isolatedArg = SGF.F.maybeGetIsolatedArgument()) {
7878
ManagedValue isolatedMV;
7979
if (isolatedArg->getOwnershipKind() == OwnershipKind::Guaranteed) {
@@ -111,7 +111,6 @@ void SILGenFunction::emitExpectedExecutorProlog() {
111111
case ActorIsolation::Nonisolated:
112112
case ActorIsolation::NonisolatedUnsafe:
113113
case ActorIsolation::Unspecified:
114-
case ActorIsolation::CallerIsolationInheriting:
115114
return false;
116115

117116
case ActorIsolation::Erased:
@@ -165,8 +164,6 @@ void SILGenFunction::emitExpectedExecutorProlog() {
165164
auto actorIsolation = getActorIsolation(funcDecl);
166165
switch (actorIsolation.getKind()) {
167166
case ActorIsolation::Unspecified:
168-
case ActorIsolation::Nonisolated:
169-
case ActorIsolation::NonisolatedUnsafe:
170167
case ActorIsolation::Concurrent:
171168
case ActorIsolation::ConcurrentUnsafe:
172169
break;
@@ -191,7 +188,8 @@ void SILGenFunction::emitExpectedExecutorProlog() {
191188
break;
192189
}
193190

194-
case ActorIsolation::CallerIsolationInheriting:
191+
case ActorIsolation::Nonisolated:
192+
case ActorIsolation::NonisolatedUnsafe:
195193
assert(F.isAsync());
196194
setExpectedExecutorForParameterIsolation(*this, actorIsolation);
197195
break;
@@ -212,7 +210,6 @@ void SILGenFunction::emitExpectedExecutorProlog() {
212210
case ActorIsolation::NonisolatedUnsafe:
213211
case ActorIsolation::Concurrent:
214212
case ActorIsolation::ConcurrentUnsafe:
215-
case ActorIsolation::CallerIsolationInheriting:
216213
break;
217214

218215
case ActorIsolation::Erased:
@@ -642,7 +639,6 @@ SILGenFunction::emitClosureIsolation(SILLocation loc, SILDeclRef constant,
642639
case ActorIsolation::NonisolatedUnsafe:
643640
case ActorIsolation::Concurrent:
644641
case ActorIsolation::ConcurrentUnsafe:
645-
case ActorIsolation::CallerIsolationInheriting:
646642
return emitNonIsolatedIsolation(loc);
647643

648644
case ActorIsolation::Erased:
@@ -696,7 +692,6 @@ SILGenFunction::emitExecutor(SILLocation loc, ActorIsolation isolation,
696692
case ActorIsolation::NonisolatedUnsafe:
697693
case ActorIsolation::Concurrent:
698694
case ActorIsolation::ConcurrentUnsafe:
699-
case ActorIsolation::CallerIsolationInheriting:
700695
return std::nullopt;
701696

702697
case ActorIsolation::Erased:

lib/SILGen/SILGenConstructor.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,6 @@ static bool ctorHopsInjectedByDefiniteInit(ConstructorDecl *ctor,
606606
case ActorIsolation::Concurrent:
607607
case ActorIsolation::ConcurrentUnsafe:
608608
case ActorIsolation::GlobalActor:
609-
case ActorIsolation::CallerIsolationInheriting:
610609
return false;
611610
}
612611
}
@@ -1562,7 +1561,6 @@ void SILGenFunction::emitMemberInitializer(DeclContext *dc, VarDecl *selfDecl,
15621561
case ActorIsolation::NonisolatedUnsafe:
15631562
case ActorIsolation::Concurrent:
15641563
case ActorIsolation::ConcurrentUnsafe:
1565-
case ActorIsolation::CallerIsolationInheriting:
15661564
break;
15671565

15681566
case ActorIsolation::Erased:

lib/SILGen/SILGenFunction.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1100,7 +1100,6 @@ SILGenFunction::emitClosureValue(SILLocation loc, SILDeclRef constant,
11001100
case ActorIsolation::NonisolatedUnsafe:
11011101
case ActorIsolation::Concurrent:
11021102
case ActorIsolation::ConcurrentUnsafe:
1103-
case ActorIsolation::CallerIsolationInheriting:
11041103
case ActorIsolation::ActorInstance:
11051104
break;
11061105

lib/SILOptimizer/Mandatory/DefiniteInitialization.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1070,7 +1070,6 @@ void LifetimeChecker::injectActorHops() {
10701070
case ActorIsolation::NonisolatedUnsafe:
10711071
case ActorIsolation::Concurrent:
10721072
case ActorIsolation::ConcurrentUnsafe:
1073-
case ActorIsolation::CallerIsolationInheriting:
10741073
case ActorIsolation::GlobalActor:
10751074
return;
10761075
}

lib/Sema/ConstraintSystem.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5111,7 +5111,6 @@ ConstraintSystem::inferKeyPathLiteralCapability(KeyPathExpr *keyPath) {
51115111
case ActorIsolation::NonisolatedUnsafe:
51125112
case ActorIsolation::Concurrent:
51135113
case ActorIsolation::ConcurrentUnsafe:
5114-
case ActorIsolation::CallerIsolationInheriting:
51155114
break;
51165115

51175116
case ActorIsolation::Erased:

0 commit comments

Comments
 (0)