Skip to content

Commit 47afd21

Browse files
committed
[Concurrency] Remove ActorIsolation::GlobalActorUnsafe.
1 parent f581eb7 commit 47afd21

16 files changed

+10
-63
lines changed

include/swift/AST/ActorIsolation.h

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,6 @@ class ActorIsolation {
6666
/// The declaration is isolated to a global actor. It can refer to other
6767
/// entities with the same global actor.
6868
GlobalActor,
69-
/// The declaration is isolated to a global actor but with the "unsafe"
70-
/// annotation, which means that we only enforce the isolation if we're
71-
/// coming from something with specific isolation.
72-
GlobalActorUnsafe,
7369
};
7470

7571
private:
@@ -139,7 +135,7 @@ class ActorIsolation {
139135
.Case("global_actor",
140136
std::optional<ActorIsolation>(ActorIsolation::GlobalActor))
141137
.Case("global_actor_unsafe", std::optional<ActorIsolation>(
142-
ActorIsolation::GlobalActorUnsafe))
138+
ActorIsolation::GlobalActor))
143139
.Default(std::nullopt);
144140
if (kind == std::nullopt)
145141
return std::nullopt;
@@ -170,7 +166,6 @@ class ActorIsolation {
170166
switch (getKind()) {
171167
case ActorInstance:
172168
case GlobalActor:
173-
case GlobalActorUnsafe:
174169
return true;
175170

176171
case Unspecified:
@@ -185,7 +180,7 @@ class ActorIsolation {
185180
VarDecl *getActorInstance() const;
186181

187182
bool isGlobalActor() const {
188-
return getKind() == GlobalActor || getKind() == GlobalActorUnsafe;
183+
return getKind() == GlobalActor;
189184
}
190185

191186
bool isMainActor() const;
@@ -237,7 +232,6 @@ class ActorIsolation {
237232
lhs.parameterIndex == rhs.parameterIndex);
238233

239234
case GlobalActor:
240-
case GlobalActorUnsafe:
241235
llvm_unreachable("Global actors handled above");
242236
}
243237
}
@@ -270,9 +264,6 @@ class ActorIsolation {
270264
case GlobalActor:
271265
os << "global_actor";
272266
return;
273-
case GlobalActorUnsafe:
274-
os << "global_actor_unsafe";
275-
return;
276267
}
277268
llvm_unreachable("Covered switch isn't covered?!");
278269
}

lib/AST/ASTDumper.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2789,7 +2789,6 @@ class PrintExpr : public ExprVisitor<PrintExpr, void, StringRef>,
27892789
break;
27902790

27912791
case ActorIsolation::GlobalActor:
2792-
case ActorIsolation::GlobalActorUnsafe:
27932792
printFieldQuoted(isolation.getGlobalActor().getString(),
27942793
"global_actor_isolated", CapturesColor);
27952794
break;

lib/AST/Decl.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2518,7 +2518,6 @@ static bool deferMatchesEnclosingAccess(const FuncDecl *defer) {
25182518
case ActorIsolation::NonisolatedUnsafe:
25192519
break;
25202520

2521-
case ActorIsolation::GlobalActorUnsafe:
25222521
case ActorIsolation::GlobalActor:
25232522
if (isolation.preconcurrency())
25242523
break;
@@ -10903,7 +10902,6 @@ bool VarDecl::isSelfParamCaptureIsolated() const {
1090310902
case ActorIsolation::Nonisolated:
1090410903
case ActorIsolation::NonisolatedUnsafe:
1090510904
case ActorIsolation::GlobalActor:
10906-
case ActorIsolation::GlobalActorUnsafe:
1090710905
return false;
1090810906

1090910907
case ActorIsolation::ActorInstance:

lib/AST/DiagnosticEngine.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -910,8 +910,7 @@ static void formatDiagnosticArgument(StringRef Modifier,
910910
Out << "actor-isolated";
911911
break;
912912

913-
case ActorIsolation::GlobalActor:
914-
case ActorIsolation::GlobalActorUnsafe: {
913+
case ActorIsolation::GlobalActor: {
915914
if (isolation.isMainActor()) {
916915
Out << "main actor-isolated";
917916
} else {

lib/AST/TypeCheckRequests.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1663,7 +1663,6 @@ bool ActorIsolation::requiresSubstitution() const {
16631663
return false;
16641664

16651665
case GlobalActor:
1666-
case GlobalActorUnsafe:
16671666
return getGlobalActor()->hasTypeParameter();
16681667
}
16691668
llvm_unreachable("unhandled actor isolation kind!");
@@ -1678,7 +1677,6 @@ ActorIsolation ActorIsolation::subst(SubstitutionMap subs) const {
16781677
return *this;
16791678

16801679
case GlobalActor:
1681-
case GlobalActorUnsafe:
16821680
return forGlobalActor(getGlobalActor().subst(subs))
16831681
.withPreconcurrency(preconcurrency());
16841682
}
@@ -1717,7 +1715,6 @@ void swift::simple_display(
17171715
break;
17181716

17191717
case ActorIsolation::GlobalActor:
1720-
case ActorIsolation::GlobalActorUnsafe:
17211718
out << "actor-isolated to global actor ";
17221719
if (state.isSILParsed()) {
17231720
out << "SILPARSED";

lib/IDE/CompletionLookup.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,6 @@ void CompletionLookup::analyzeActorIsolation(
767767
}
768768
break;
769769
}
770-
case ActorIsolation::GlobalActorUnsafe:
771770
case ActorIsolation::GlobalActor: {
772771
// For "preconcurrency" global actor isolation, automatic 'async' only happens
773772
// if the context has adopted concurrency.

lib/SILGen/SILGenApply.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3051,7 +3051,6 @@ static void emitDelayedArguments(SILGenFunction &SGF,
30513051
SILValue executor;
30523052
switch (*defaultArgIsolation) {
30533053
case ActorIsolation::GlobalActor:
3054-
case ActorIsolation::GlobalActorUnsafe:
30553054
executor = SGF.emitLoadGlobalActorExecutor(
30563055
defaultArgIsolation->getGlobalActor());
30573056
break;
@@ -5630,7 +5629,6 @@ RValue SILGenFunction::emitApply(
56305629
break;
56315630

56325631
case ActorIsolation::GlobalActor:
5633-
case ActorIsolation::GlobalActorUnsafe:
56345632
executor = emitLoadGlobalActorExecutor(
56355633
implicitActorHopTarget->getGlobalActor());
56365634
break;

lib/SILGen/SILGenConstructor.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,6 @@ static bool ctorHopsInjectedByDefiniteInit(ConstructorDecl *ctor,
611611
case ActorIsolation::Nonisolated:
612612
case ActorIsolation::NonisolatedUnsafe:
613613
case ActorIsolation::GlobalActor:
614-
case ActorIsolation::GlobalActorUnsafe:
615614
return false;
616615
}
617616
}
@@ -1582,7 +1581,6 @@ void SILGenFunction::emitMemberInitializer(DeclContext *dc, VarDecl *selfDecl,
15821581
break;
15831582

15841583
case ActorIsolation::GlobalActor:
1585-
case ActorIsolation::GlobalActorUnsafe:
15861584
case ActorIsolation::ActorInstance: {
15871585
if (requiredIsolation != contextIsolation) {
15881586
// Implicit initializers diagnose actor isolation violations

lib/SILGen/SILGenProlog.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,7 +1274,6 @@ void SILGenFunction::emitProlog(
12741274
return true;
12751275

12761276
case ActorIsolation::GlobalActor:
1277-
case ActorIsolation::GlobalActorUnsafe:
12781277
// Global-actor-isolated types should likely have deinits that
12791278
// are not themselves actor-isolated, yet still have access to
12801279
// the instance properties of the class.
@@ -1373,7 +1372,6 @@ void SILGenFunction::emitProlog(
13731372
}
13741373

13751374
case ActorIsolation::GlobalActor:
1376-
case ActorIsolation::GlobalActorUnsafe:
13771375
if (F.isAsync() || wantDataRaceChecks) {
13781376
ExpectedExecutor =
13791377
emitLoadGlobalActorExecutor(actorIsolation.getGlobalActor());
@@ -1397,7 +1395,6 @@ void SILGenFunction::emitProlog(
13971395
}
13981396

13991397
case ActorIsolation::GlobalActor:
1400-
case ActorIsolation::GlobalActorUnsafe:
14011398
if (wantExecutor) {
14021399
ExpectedExecutor =
14031400
emitLoadGlobalActorExecutor(actorIsolation.getGlobalActor());
@@ -1553,7 +1550,6 @@ SILGenFunction::emitExecutor(SILLocation loc, ActorIsolation isolation,
15531550
}
15541551

15551552
case ActorIsolation::GlobalActor:
1556-
case ActorIsolation::GlobalActorUnsafe:
15571553
return emitLoadGlobalActorExecutor(isolation.getGlobalActor());
15581554
}
15591555
llvm_unreachable("covered switch");

lib/SILOptimizer/Mandatory/DefiniteInitialization.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1047,7 +1047,6 @@ void LifetimeChecker::injectActorHops() {
10471047
case ActorIsolation::Unspecified:
10481048
case ActorIsolation::Nonisolated:
10491049
case ActorIsolation::NonisolatedUnsafe:
1050-
case ActorIsolation::GlobalActorUnsafe:
10511050
case ActorIsolation::GlobalActor:
10521051
return;
10531052
}

lib/Sema/ConstraintSystem.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7727,7 +7727,6 @@ ConstraintSystem::inferKeyPathLiteralCapability(KeyPathExpr *keyPath) {
77277727
// A reference to an actor isolated state make key path non-Sendable.
77287728
case ActorIsolation::ActorInstance:
77297729
case ActorIsolation::GlobalActor:
7730-
case ActorIsolation::GlobalActorUnsafe:
77317730
isSendable = false;
77327731
break;
77337732
}

lib/Sema/TypeCheckConcurrency.cpp

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ static bool requiresFlowIsolation(ActorIsolation typeIso,
103103
// Otherwise, if it's an actor instance, then it depends on async-ness.
104104
switch (typeIso.getKind()) {
105105
case ActorIsolation::GlobalActor:
106-
case ActorIsolation::GlobalActorUnsafe:
107106
case ActorIsolation::Unspecified:
108107
case ActorIsolation::Nonisolated:
109108
case ActorIsolation::NonisolatedUnsafe:
@@ -524,7 +523,6 @@ static bool varIsSafeAcrossActors(const ModuleDecl *fromModule,
524523

525524
case ActorIsolation::ActorInstance:
526525
case ActorIsolation::GlobalActor:
527-
case ActorIsolation::GlobalActorUnsafe:
528526
// If it's explicitly 'nonisolated', it's okay.
529527
if (var->getAttrs().hasAttribute<NonisolatedAttr>())
530528
return true;
@@ -1663,7 +1661,6 @@ static bool wasLegacyEscapingUseRestriction(AbstractFunctionDecl *fn) {
16631661
case ActorIsolation::Nonisolated:
16641662
case ActorIsolation::NonisolatedUnsafe:
16651663
case ActorIsolation::GlobalActor:
1666-
case ActorIsolation::GlobalActorUnsafe:
16671664
// convenience inits did not have the restriction.
16681665
if (auto *ctor = dyn_cast<ConstructorDecl>(fn))
16691666
if (ctor->isConvenienceInit())
@@ -1887,7 +1884,6 @@ static ActorIsolation getInnermostIsolatedContext(
18871884
return isolation;
18881885

18891886
case ActorIsolation::GlobalActor:
1890-
case ActorIsolation::GlobalActorUnsafe:
18911887
return ActorIsolation::forGlobalActor(
18921888
dc->mapTypeIntoContext(isolation.getGlobalActor()))
18931889
.withPreconcurrency(isolation.preconcurrency());
@@ -2107,7 +2103,6 @@ namespace {
21072103
switch (getActorIsolation(fn)) {
21082104
case ActorIsolation::ActorInstance:
21092105
case ActorIsolation::GlobalActor:
2110-
case ActorIsolation::GlobalActorUnsafe:
21112106
case ActorIsolation::Nonisolated:
21122107
case ActorIsolation::NonisolatedUnsafe:
21132108
return false;
@@ -2438,7 +2433,6 @@ namespace {
24382433
return;
24392434

24402435
case ActorIsolation::GlobalActor:
2441-
case ActorIsolation::GlobalActorUnsafe:
24422436
case ActorIsolation::ActorInstance:
24432437
break;
24442438
}
@@ -2850,7 +2844,6 @@ namespace {
28502844
return ReferencedActor(var, isPotentiallyIsolated, specificNonIsoClosureKind(dc));
28512845

28522846
case ActorIsolation::GlobalActor:
2853-
case ActorIsolation::GlobalActorUnsafe:
28542847
return ReferencedActor::forGlobalActor(
28552848
var, isPotentiallyIsolated, isolation.getGlobalActor());
28562849
}
@@ -2902,7 +2895,6 @@ namespace {
29022895
return ReferencedActor(var, isPotentiallyIsolated, ReferencedActor::NonIsolatedContext);
29032896

29042897
case ActorIsolation::GlobalActor:
2905-
case ActorIsolation::GlobalActorUnsafe:
29062898
return ReferencedActor::forGlobalActor(
29072899
var, isPotentiallyIsolated, isolation.getGlobalActor());
29082900

@@ -3470,8 +3462,7 @@ namespace {
34703462
/*Implicit=*/true);
34713463
break;
34723464
}
3473-
case ActorIsolation::GlobalActor:
3474-
case ActorIsolation::GlobalActorUnsafe: {
3465+
case ActorIsolation::GlobalActor: {
34753466
// Form a <global actor type>.shared reference.
34763467
Type globalActorType = getDeclContext()->mapTypeIntoContext(
34773468
isolation.getGlobalActor());
@@ -3612,8 +3603,7 @@ namespace {
36123603
case ActorIsolation::Unspecified:
36133604
break;
36143605

3615-
case ActorIsolation::GlobalActor:
3616-
case ActorIsolation::GlobalActorUnsafe: {
3606+
case ActorIsolation::GlobalActor: {
36173607
auto result = ActorReferenceResult::forReference(
36183608
declRef, component.getLoc(), getDeclContext(),
36193609
kindOfUsage(decl, keyPath));
@@ -3806,7 +3796,6 @@ namespace {
38063796
break;
38073797

38083798
case ActorIsolation::GlobalActor:
3809-
case ActorIsolation::GlobalActorUnsafe:
38103799
refGlobalActor = contextIsolation.getGlobalActor();
38113800
refKind = isMainActor(refGlobalActor)
38123801
? ReferencedActor::MainActor
@@ -3921,8 +3910,7 @@ namespace {
39213910
ActorIsolation::NonisolatedUnsafe)
39223911
.withPreconcurrency(preconcurrency);
39233912

3924-
case ActorIsolation::GlobalActor:
3925-
case ActorIsolation::GlobalActorUnsafe: {
3913+
case ActorIsolation::GlobalActor: {
39263914
Type globalActor = closure->mapTypeIntoContext(
39273915
parentIsolation.getGlobalActor()->mapTypeOutOfContext());
39283916
return ActorIsolation::forGlobalActor(globalActor)
@@ -4175,7 +4163,6 @@ getIsolationFromWitnessedRequirements(ValueDecl *value) {
41754163
continue;
41764164

41774165
case ActorIsolation::GlobalActor:
4178-
case ActorIsolation::GlobalActorUnsafe:
41794166
case ActorIsolation::Nonisolated:
41804167
case ActorIsolation::NonisolatedUnsafe:
41814168
break;
@@ -4213,8 +4200,7 @@ getIsolationFromWitnessedRequirements(ValueDecl *value) {
42134200
case ActorIsolation::Unspecified:
42144201
return true;
42154202

4216-
case ActorIsolation::GlobalActor:
4217-
case ActorIsolation::GlobalActorUnsafe: {
4203+
case ActorIsolation::GlobalActor: {
42184204
// Substitute into the global actor type.
42194205
auto conformance = std::get<0>(isolated);
42204206
auto requirementSubs = SubstitutionMap::getProtocolSubstitutions(
@@ -4257,7 +4243,6 @@ getIsolationFromConformances(NominalTypeDecl *nominal) {
42574243
break;
42584244

42594245
case ActorIsolation::GlobalActor:
4260-
case ActorIsolation::GlobalActorUnsafe:
42614246
if (!foundIsolation) {
42624247
foundIsolation = protoIsolation;
42634248
continue;
@@ -4315,7 +4300,6 @@ getIsolationFromWrappers(NominalTypeDecl *nominal) {
43154300
break;
43164301

43174302
case ActorIsolation::GlobalActor:
4318-
case ActorIsolation::GlobalActorUnsafe:
43194303
if (!foundIsolation) {
43204304
foundIsolation = isolation;
43214305
continue;
@@ -4510,8 +4494,7 @@ static bool checkClassGlobalActorIsolation(
45104494
// This is an error that will be diagnosed later. Ignore it here.
45114495
return false;
45124496

4513-
case ActorIsolation::GlobalActor:
4514-
case ActorIsolation::GlobalActorUnsafe: {
4497+
case ActorIsolation::GlobalActor: {
45154498
// If the global actors match, we're fine.
45164499
Type superclassGlobalActor = superIsolation.getGlobalActor();
45174500
auto module = classDecl->getParentModule();
@@ -4846,7 +4829,6 @@ ActorIsolation ActorIsolationRequest::evaluate(
48464829
inferred == ActorIsolation::NonisolatedUnsafe, /*implicit=*/true));
48474830
break;
48484831

4849-
case ActorIsolation::GlobalActorUnsafe:
48504832
case ActorIsolation::GlobalActor: {
48514833
// Stored properties of a struct don't need global-actor isolation.
48524834
if (ctx.isSwiftVersionAtLeast(6))
@@ -4906,7 +4888,6 @@ ActorIsolation ActorIsolationRequest::evaluate(
49064888
break;
49074889

49084890
case ActorIsolation::GlobalActor:
4909-
case ActorIsolation::GlobalActorUnsafe:
49104891
return inferredIsolation(enclosingIsolation);
49114892
}
49124893
}
@@ -5074,7 +5055,6 @@ bool HasIsolatedSelfRequest::evaluate(
50745055
break;
50755056

50765057
case ActorIsolation::GlobalActor:
5077-
case ActorIsolation::GlobalActorUnsafe:
50785058
return false;
50795059

50805060
case ActorIsolation::ActorInstance:
@@ -5450,7 +5430,6 @@ bool swift::checkSendableConformance(
54505430
break;
54515431

54525432
case ActorIsolation::GlobalActor:
5453-
case ActorIsolation::GlobalActorUnsafe:
54545433
return false;
54555434
}
54565435

@@ -5928,7 +5907,6 @@ AnyFunctionType *swift::adjustFunctionTypeForConcurrency(
59285907
case ActorIsolation::Unspecified:
59295908
return fnType;
59305909

5931-
case ActorIsolation::GlobalActorUnsafe:
59325910
case ActorIsolation::GlobalActor:
59335911
// For preconcurrency, only treat as global-actor-qualified
59345912
// within code that has adopted Swift Concurrency features.
@@ -6210,7 +6188,6 @@ bool swift::isAccessibleAcrossActors(
62106188
case ActorIsolation::Unspecified:
62116189
return true;
62126190

6213-
case ActorIsolation::GlobalActorUnsafe:
62146191
case ActorIsolation::GlobalActor:
62156192
return false;
62166193
}

0 commit comments

Comments
 (0)