Skip to content

Commit f711ecc

Browse files
committed
[SE-0466] Infer isolated deinit in main-actor-by-default mode
Now that main-actor-isolated deinit can be back-deployed, enable inference of isolated deinit within main-actor-by-default mode. Implements rdar://154729369.
1 parent 9c9c8b6 commit f711ecc

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

lib/Sema/TypeCheckConcurrency.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6051,10 +6051,9 @@ computeDefaultInferredActorIsolation(ValueDecl *value) {
60516051
sendableConformanceRequiresNonisolated(nominalTypeDecl))
60526052
return { };
60536053

6054-
// FIXME: deinit should be implicitly MainActor too.
60556054
if (isa<TypeDecl>(value) || isa<ExtensionDecl>(value) ||
6056-
isa<AbstractStorageDecl>(value) || isa<FuncDecl>(value) ||
6057-
isa<ConstructorDecl>(value)) {
6055+
isa<AbstractStorageDecl>(value) ||
6056+
isa<AbstractFunctionDecl>(value)) {
60586057
// Preconcurrency here is used to stage the diagnostics
60596058
// when users select `@MainActor` default isolation with
60606059
// non-strict concurrency modes (pre Swift 6).

test/Concurrency/assume_mainactor.swift

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@
88
class Klass {
99
// Implicit deinit
1010
// CHECK: // Klass.deinit
11-
// CHECK-NEXT: // Isolation: unspecified
11+
// CHECK-NEXT: // Isolation: global_actor. type: MainActor
1212
// CHECK-NEXT: sil hidden [ossa] @$s16assume_mainactor5KlassCfd : $@convention(method) (@guaranteed Klass) -> @owned Builtin.NativeObject {
1313

1414
// Implicit deallocating deinit
1515
// CHECK: // Klass.__deallocating_deinit
1616
// CHECK-NEXT: // Isolation: nonisolated
1717
// CHECK-NEXT: sil hidden [ossa] @$s16assume_mainactor5KlassCfD : $@convention(method) (@owned Klass) -> () {
18+
// CHECK: swift_task_deinitOnExecutor
1819

1920
// Implicit allocating init
2021
// CHECK: // Klass.__allocating_init()
@@ -66,6 +67,16 @@ struct NonIsolatedStructContainingKlass {
6667
// CHECK-NEXT: sil hidden [ossa] @$s16assume_mainactor32NonIsolatedStructContainingKlassVACycfC : $@convention(method) (@thin NonIsolatedStructContainingKlass.Type) -> @owned NonIsolatedStructContainingKlass {
6768
}
6869

70+
struct NonCopyableStruct: ~Copyable {
71+
var x: Int
72+
var y: Int
73+
74+
// CHECK: NonCopyableStruct.deinit
75+
// CHECK-NEXT: Isolation: nonisolated
76+
deinit {
77+
}
78+
}
79+
6980
@globalActor
7081
actor CustomActor {
7182
static nonisolated let shared = CustomActor()

0 commit comments

Comments
 (0)