Skip to content

Commit c7c7df3

Browse files
committed
[Frontend] NFC: Promote InferSendableFromCaptures to an upcoming feature in Swift 6
1 parent 42a4d2d commit c7c7df3

File tree

4 files changed

+15
-18
lines changed

4 files changed

+15
-18
lines changed

include/swift/Basic/Features.def

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,9 @@ UPCOMING_FEATURE(InternalImportsByDefault, 409, 6)
126126
UPCOMING_FEATURE(IsolatedDefaultValues, 411, 6)
127127
UPCOMING_FEATURE(GlobalConcurrency, 412, 6)
128128
UPCOMING_FEATURE(FullTypedThrows, 413, 6)
129-
130129
UPCOMING_FEATURE(ExistentialAny, 335, 7)
130+
UPCOMING_FEATURE(InferSendableFromCaptures, 418, 6)
131+
131132

132133
EXPERIMENTAL_FEATURE(StaticAssert, false)
133134
EXPERIMENTAL_FEATURE(NamedOpaqueTypes, false)
@@ -246,10 +247,6 @@ EXPERIMENTAL_FEATURE(StructLetDestructuring, true)
246247
/// lifetime-dependent results.
247248
EXPERIMENTAL_FEATURE(NonescapableTypes, false)
248249

249-
// Infer Sendability of unapplied and partial applied methods,
250-
// global functions and key paths.
251-
EXPERIMENTAL_FEATURE(InferSendableFromCaptures, false)
252-
253250
// Allow optional isolated parameters.
254251
EXPERIMENTAL_FEATURE(OptionalIsolatedParameters, true)
255252

test/Concurrency/predates_concurrency_swift6.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ struct X {
2626
@MainActor func onMainActor() { }
2727

2828
func testInAsync(x: X) async {
29-
let _: Int = unsafelySendableClosure // expected-error{{type '(@Sendable () -> Void) -> ()'}}
30-
let _: Int = unsafelyMainActorClosure // expected-error{{type '(@MainActor () -> Void) -> ()'}}
31-
let _: Int = unsafelyDoEverythingClosure // expected-error{{type '(@MainActor @Sendable () -> Void) -> ()'}}
29+
let _: Int = unsafelySendableClosure // expected-error{{type '@Sendable (@Sendable () -> Void) -> ()'}}
30+
let _: Int = unsafelyMainActorClosure // expected-error{{type '@Sendable (@MainActor () -> Void) -> ()'}}
31+
let _: Int = unsafelyDoEverythingClosure // expected-error{{type '@Sendable (@MainActor @Sendable () -> Void) -> ()'}}
3232
let _: Int = x.unsafelyDoEverythingClosure // expected-error{{type '(@MainActor @Sendable () -> Void) -> ()'}}
33-
let _: Int = X.unsafelyDoEverythingClosure // expected-error{{type '(X) -> (@MainActor @Sendable () -> Void) -> ()'}}
33+
let _: Int = X.unsafelyDoEverythingClosure // expected-error{{type '@Sendable (X) -> (@MainActor @Sendable () -> Void) -> ()'}}
3434
let _: Int = (X.unsafelyDoEverythingClosure)(x) // expected-error{{type '(@MainActor @Sendable () -> Void) -> ()'}}
3535

3636
let _: Int = x.sendableVar // expected-error{{type '@Sendable () -> Void'}}
@@ -41,11 +41,11 @@ func testInAsync(x: X) async {
4141
}
4242

4343
func testElsewhere(x: X) {
44-
let _: Int = unsafelySendableClosure // expected-error{{type '(@Sendable () -> Void) -> ()'}}
45-
let _: Int = unsafelyMainActorClosure // expected-error{{type '(@MainActor () -> Void) -> ()'}}
46-
let _: Int = unsafelyDoEverythingClosure // expected-error{{type '(@MainActor @Sendable () -> Void) -> ()'}}
44+
let _: Int = unsafelySendableClosure // expected-error{{type '@Sendable (@Sendable () -> Void) -> ()'}}
45+
let _: Int = unsafelyMainActorClosure // expected-error{{type '@Sendable (@MainActor () -> Void) -> ()'}}
46+
let _: Int = unsafelyDoEverythingClosure // expected-error{{type '@Sendable (@MainActor @Sendable () -> Void) -> ()'}}
4747
let _: Int = x.unsafelyDoEverythingClosure // expected-error{{type '(@MainActor @Sendable () -> Void) -> ()'}}
48-
let _: Int = X.unsafelyDoEverythingClosure // expected-error{{type '(X) -> (@MainActor @Sendable () -> Void) -> ()'}}
48+
let _: Int = X.unsafelyDoEverythingClosure // expected-error{{type '@Sendable (X) -> (@MainActor @Sendable () -> Void) -> ()'}}
4949
let _: Int = (X.unsafelyDoEverythingClosure)(x) // expected-error{{type '(@MainActor @Sendable () -> Void) -> ()'}}
5050

5151
let _: Int = x.sendableVar // expected-error{{type '@Sendable () -> Void'}}
@@ -67,7 +67,7 @@ func testCalls(x: X) {
6767
// expected-note@-1 2{{add '@MainActor' to make global function 'testCalls(x:)' part of global actor 'MainActor'}}
6868
onMainActorAlways() // expected-error{{call to main actor-isolated global function 'onMainActorAlways()' in a synchronous nonisolated context}}
6969

70-
let _: () -> Void = onMainActorAlways // expected-error{{converting function value of type '@MainActor () -> ()' to '() -> Void' loses global actor 'MainActor'}}
70+
let _: () -> Void = onMainActorAlways // expected-error{{converting function value of type '@MainActor @Sendable () -> ()' to '() -> Void' loses global actor 'MainActor'}}
7171

7272
let c = MyModelClass() // okay, synthesized init() is 'nonisolated'
7373

@@ -78,7 +78,7 @@ func testCallsWithAsync() async {
7878
onMainActorAlways() // expected-error{{expression is 'async' but is not marked with 'await'}}
7979
// expected-note@-1{{calls to global function 'onMainActorAlways()' from outside of its actor context are implicitly asynchronous}}
8080

81-
let _: () -> Void = onMainActorAlways // expected-error{{converting function value of type '@MainActor () -> ()' to '() -> Void' loses global actor 'MainActor'}}
81+
let _: () -> Void = onMainActorAlways // expected-error{{converting function value of type '@MainActor @Sendable () -> ()' to '() -> Void' loses global actor 'MainActor'}}
8282

8383
let c = MyModelClass() // okay, synthesized init() is 'nonisolated'
8484

test/Concurrency/sendable_keypaths.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-typecheck-verify-swift -enable-experimental-feature InferSendableFromCaptures -strict-concurrency=complete
1+
// RUN: %target-typecheck-verify-swift -enable-upcoming-feature InferSendableFromCaptures -strict-concurrency=complete
22

33
// REQUIRES: concurrency
44
// REQUIRES: asserts

test/Concurrency/sendable_methods.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// RUN: %target-typecheck-verify-swift -enable-experimental-feature InferSendableFromCaptures -disable-availability-checking
2-
// RUN: %target-swift-emit-silgen %s -verify -enable-experimental-feature InferSendableFromCaptures -disable-availability-checking -module-name sendable_methods | %FileCheck %s
1+
// RUN: %target-typecheck-verify-swift -enable-upcoming-feature InferSendableFromCaptures -disable-availability-checking
2+
// RUN: %target-swift-emit-silgen %s -verify -enable-upcoming-feature InferSendableFromCaptures -disable-availability-checking -module-name sendable_methods | %FileCheck %s
33

44
// REQUIRES: concurrency
55
// REQUIRES: asserts

0 commit comments

Comments
 (0)