mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[rbi] Convert all rbi tests to run also in NonisolatedNonsendingByDefault.
Going to update the tests in the next commit. This just makes it easier to review.
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
// RUN: %target-swift-frontend %s -import-objc-header %S/Inputs/regionbasedisolation.h -emit-silgen -swift-version 6 | %FileCheck %s
|
||||
|
||||
// REQUIRES: objc_interop
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
extension ObjCObject {
|
||||
// CHECK-LABEL: sil hidden [ossa] @$sSo10ObjCObjectC20regionbasedisolationE11sendObjectsSaySo8NSObjectCGyYaKF : $@convention(method) @async (@guaranteed ObjCObject) -> (@sil_sending @owned Array<NSObject>, @error any Error) {
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.1-abi-triple -strict-concurrency=complete -parse-as-library %s -emit-sil -o /dev/null -verify -DALLOW_TYPECHECKER_ERRORS -verify-additional-prefix typechecker- -verify-additional-prefix tns-allow-typechecker-
|
||||
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.1-abi-triple -strict-concurrency=complete -parse-as-library %s -emit-sil -o /dev/null -verify -verify-additional-prefix tns-
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.1-abi-triple -strict-concurrency=complete -parse-as-library %s -emit-sil -o /dev/null -verify -verify-additional-prefix tns-ni- -verify-additional-prefix tns-
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.1-abi-triple -strict-concurrency=complete -parse-as-library %s -emit-sil -o /dev/null -verify -verify-additional-prefix tns-ni-ns- -verify-additional-prefix tns- -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: asserts
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
class NotConcurrent { } // expected-note 12{{class 'NotConcurrent' does not conform to the 'Sendable' protocol}}
|
||||
// expected-tns-allow-typechecker-note @-1 {{class 'NotConcurrent' does not conform to the 'Sendable' protocol}}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.1-abi-triple -strict-concurrency=complete %s -emit-sil -o /dev/null -verify
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.1-abi-triple -strict-concurrency=complete %s -emit-sil -o /dev/null -verify -verify-additional-prefix ni-
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.1-abi-triple -strict-concurrency=complete %s -emit-sil -o /dev/null -verify -verify-additional-prefix ni-ns- -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: objc_interop
|
||||
// REQUIRES: asserts
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
import Foundation
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.0-abi-triple -verify -strict-concurrency=targeted -verify-additional-prefix targeted- -emit-sil -o /dev/null %s
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.0-abi-triple -verify -strict-concurrency=complete -verify-additional-prefix tns- -verify-additional-prefix complete-and-tns- -emit-sil -o /dev/null %s
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.0-abi-triple -verify -verify-additional-prefix targeted-and-ni- -strict-concurrency=targeted -verify-additional-prefix targeted- -emit-sil -o /dev/null %s
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.0-abi-triple -verify -strict-concurrency=complete -verify-additional-prefix tns-ni- -verify-additional-prefix tns- -emit-sil -o /dev/null %s -swift-version 5 -verify-additional-prefix targeted-and-ni-
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.0-abi-triple -verify -strict-concurrency=complete -verify-additional-prefix tns-ni-ns- -verify-additional-prefix tns- -emit-sil -o /dev/null %s -enable-upcoming-feature NonisolatedNonsendingByDefault -swift-version 5 -DNONISOLATEDNONSENDING
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: asserts
|
||||
// REQUIRES: OS=macosx
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
@available(SwiftStdlib 5.1, *)
|
||||
struct NS1 { }
|
||||
@@ -15,7 +17,7 @@ extension NS1: Sendable { }
|
||||
|
||||
@available(SwiftStdlib 5.1, *)
|
||||
struct NS2 { // expected-note {{consider making struct 'NS2' conform to the 'Sendable' protocol}}
|
||||
// expected-complete-and-tns-note @-1 {{consider making struct 'NS2' conform to the 'Sendable' protocol}}
|
||||
// expected-tns-note @-1 {{consider making struct 'NS2' conform to the 'Sendable' protocol}}
|
||||
var ns1: NS1
|
||||
}
|
||||
|
||||
@@ -27,7 +29,7 @@ extension NS3: Sendable { }
|
||||
|
||||
@available(SwiftStdlib 5.1, *)
|
||||
class NS4 { } // expected-note {{class 'NS4' does not conform to the 'Sendable' protocol}}
|
||||
// expected-complete-and-tns-note @-1 {{class 'NS4' does not conform to the 'Sendable' protocol}}
|
||||
// expected-tns-note @-1 {{class 'NS4' does not conform to the 'Sendable' protocol}}
|
||||
|
||||
@available(SwiftStdlib 5.1, *)
|
||||
func acceptCV<T: Sendable>(_: T) { }
|
||||
@@ -44,15 +46,15 @@ func testCV(
|
||||
|
||||
acceptCV(ns1array) // expected-warning {{conformance of 'NS1' to 'Sendable' is unavailable}}
|
||||
|
||||
acceptCV(ns2) // expected-complete-and-tns-warning {{type 'NS2' does not conform to the 'Sendable' protocol}}
|
||||
acceptCV(ns2) // expected-tns-warning {{type 'NS2' does not conform to the 'Sendable' protocol}}
|
||||
|
||||
acceptCV(ns3) // expected-warning {{conformance of 'NS3' to 'Sendable' is only available in macOS 11.0 or newer}}
|
||||
// expected-note @-1 {{add 'if #available' version check}}
|
||||
|
||||
acceptCV(ns4) // expected-complete-and-tns-warning {{type 'NS4' does not conform to the 'Sendable' protocol}}
|
||||
acceptCV(ns4) // expected-tns-warning {{type 'NS4' does not conform to the 'Sendable' protocol}}
|
||||
|
||||
acceptCV(fn) // expected-complete-and-tns-warning {{type '() -> Void' does not conform to the 'Sendable' protocol}}
|
||||
// expected-complete-and-tns-note @-1 {{a function type must be marked '@Sendable' to conform to 'Sendable'}}
|
||||
acceptCV(fn) // expected-tns-warning {{type '() -> Void' does not conform to the 'Sendable' protocol}}
|
||||
// expected-tns-note @-1 {{a function type must be marked '@Sendable' to conform to 'Sendable'}}
|
||||
|
||||
acceptSendableFn(fn) // expected-warning{{passing non-Sendable parameter 'fn' to function expecting a '@Sendable' closure}}
|
||||
}
|
||||
@@ -93,8 +95,8 @@ public actor MyActor: MyProto {
|
||||
|
||||
func g(ns1: NS1) async {
|
||||
await nonisolatedAsyncFunc1(ns1)
|
||||
// expected-tns-warning @-1 {{sending 'ns1' risks causing data races}}
|
||||
// expected-tns-note @-2 {{sending 'self'-isolated 'ns1' to nonisolated global function 'nonisolatedAsyncFunc1' risks causing data races between nonisolated and 'self'-isolated uses}}
|
||||
// expected-tns-ni-warning @-1 {{sending 'ns1' risks causing data races}}
|
||||
// expected-tns-ni-note @-2 {{sending 'self'-isolated 'ns1' to nonisolated global function 'nonisolatedAsyncFunc1' risks causing data races between nonisolated and 'self'-isolated uses}}
|
||||
_ = await nonisolatedAsyncFunc2()
|
||||
}
|
||||
}
|
||||
@@ -162,18 +164,18 @@ class Super {
|
||||
|
||||
@MainActor
|
||||
func bar (x : () -> ()) async {}
|
||||
// expected-note@-1 {{a function type must be marked '@Sendable' to conform to 'Sendable'}}
|
||||
// expected-targeted-and-ni-note @-1 {{a function type must be marked '@Sendable' to conform to 'Sendable'}}
|
||||
|
||||
@MainActor
|
||||
func foo2<T : Sendable>(x: T) async {}
|
||||
|
||||
@MainActor
|
||||
func bar2<T>(x: T) async {}
|
||||
// expected-note@-1 {{consider making generic parameter 'T' conform to the 'Sendable' protocol}} {{14-14=: Sendable}}
|
||||
// expected-targeted-and-ni-note @-1 {{consider making generic parameter 'T' conform to the 'Sendable' protocol}} {{14-14=: Sendable}}
|
||||
|
||||
@MainActor
|
||||
func bar3<T: Equatable>(x: T) async {}
|
||||
// expected-note@-1 {{consider making generic parameter 'T' conform to the 'Sendable' protocol}} {{25-25= & Sendable}}
|
||||
// expected-targeted-and-ni-note @-1 {{consider making generic parameter 'T' conform to the 'Sendable' protocol}} {{25-25= & Sendable}}
|
||||
}
|
||||
|
||||
// Make sure isolation crossing overrides check sendability
|
||||
@@ -182,16 +184,25 @@ class Super {
|
||||
class Sub : Super {
|
||||
override nonisolated func foo(x : () -> ()) async {}
|
||||
|
||||
// We do not emit an error for the override with
|
||||
// NonisolatedNonsendingByDefault since the vtable thunk passes in MainActor
|
||||
// so we are still in the main actor even though we are nonisolated. In the
|
||||
// case of that being disabled, we cannot do this since we will hop off the
|
||||
// actor.
|
||||
override nonisolated func bar(x : () -> ()) async {}
|
||||
// expected-warning@-1 {{non-Sendable parameter type '() -> ()' cannot be sent from caller of superclass instance method 'bar(x:)' into nonisolated override}}
|
||||
// expected-targeted-and-ni-warning@-1 {{non-Sendable parameter type '() -> ()' cannot be sent from caller of superclass instance method 'bar(x:)' into nonisolated override}}
|
||||
|
||||
override nonisolated func foo2<T>(x: T) async {}
|
||||
|
||||
// See comment above about why nonisolated overrides of superclass are allowed
|
||||
// when is enabled NonisolatedNonsendingByDefault.
|
||||
override nonisolated func bar2<T>(x: T) async {}
|
||||
// expected-warning@-1 {{non-Sendable parameter type 'T' cannot be sent from caller of superclass instance method 'bar2(x:)' into nonisolated override}}
|
||||
// expected-targeted-and-ni-warning @-1 {{non-Sendable parameter type 'T' cannot be sent from caller of superclass instance method 'bar2(x:)' into nonisolated override}}
|
||||
|
||||
// See comment above about why nonisolated overrides of superclass are allowed
|
||||
// when is enabled NonisolatedNonsendingByDefault.
|
||||
override nonisolated func bar3<T>(x: T) async {}
|
||||
// expected-warning@-1 {{non-Sendable parameter type 'T' cannot be sent from caller of superclass instance method 'bar3(x:)' into nonisolated override}}
|
||||
// expected-targeted-and-ni-warning @-1 {{non-Sendable parameter type 'T' cannot be sent from caller of superclass instance method 'bar3(x:)' into nonisolated override}}
|
||||
}
|
||||
|
||||
@available(SwiftStdlib 5.1, *)
|
||||
@@ -217,7 +228,8 @@ class SubWSafeSubscript : SuperWSafeSubscript {
|
||||
class SuperWUnsafeSubscript {
|
||||
@MainActor
|
||||
subscript<T>(x : T) -> Int {
|
||||
// expected-note@-1 2{{consider making generic parameter 'T' conform to the 'Sendable' protocol}}
|
||||
// expected-targeted-and-ni-note @-1 {{consider making generic parameter 'T' conform to the 'Sendable' protocol}}
|
||||
// expected-targeted-and-ni-note @-2 {{consider making generic parameter 'T' conform to the 'Sendable' protocol}}
|
||||
get async {
|
||||
return 0
|
||||
}
|
||||
@@ -226,10 +238,15 @@ class SuperWUnsafeSubscript {
|
||||
|
||||
@available(SwiftStdlib 5.1, *)
|
||||
class SubWUnsafeSubscript : SuperWUnsafeSubscript {
|
||||
// We do not emit an error for the override with
|
||||
// NonisolatedNonsendingByDefault since the vtable thunk passes in MainActor
|
||||
// so we are still in the main actor even though we are nonisolated. In the
|
||||
// case of that being disabled, we cannot do this since we will hop off the
|
||||
// actor.
|
||||
override nonisolated subscript<T>(x : T) -> Int {
|
||||
get async {
|
||||
// expected-warning@-2{{non-Sendable parameter type 'T' cannot be sent from caller of superclass subscript 'subscript(_:)' into nonisolated override}}
|
||||
// expected-warning@-2{{non-Sendable parameter type 'T' cannot be sent from caller of superclass getter for subscript 'subscript(_:)' into nonisolated override}}
|
||||
// expected-targeted-and-ni-warning@-2{{non-Sendable parameter type 'T' cannot be sent from caller of superclass subscript 'subscript(_:)' into nonisolated override}}
|
||||
// expected-targeted-and-ni-warning@-2{{non-Sendable parameter type 'T' cannot be sent from caller of superclass getter for subscript 'subscript(_:)' into nonisolated override}}
|
||||
// there really shouldn't be two warnings produced here, see rdar://110846040 (Sendable diagnostics reported twice for subscript getters)
|
||||
return 0
|
||||
}
|
||||
@@ -263,7 +280,7 @@ struct CustomActor {
|
||||
final class NonSendable {
|
||||
// expected-note @-1 5 {{class 'NonSendable' does not conform to the 'Sendable' protocol}}
|
||||
// TransferNonSendable emits 3 fewer errors here.
|
||||
// expected-complete-and-tns-note @-3 {{class 'NonSendable' does not conform to the 'Sendable' protocol}}
|
||||
// expected-tns-note @-3 {{class 'NonSendable' does not conform to the 'Sendable' protocol}}
|
||||
var value = ""
|
||||
|
||||
@MainActor
|
||||
@@ -341,6 +358,7 @@ func testNonSendableBaseArg3() async {
|
||||
@Sendable
|
||||
func globalSendable(_ ns: NonSendable) async {}
|
||||
|
||||
#if !NONISOLATEDNONSENDING
|
||||
@available(SwiftStdlib 5.1, *)
|
||||
@MainActor
|
||||
func callNonisolatedAsyncClosure(
|
||||
@@ -348,14 +366,15 @@ func callNonisolatedAsyncClosure(
|
||||
g: (NonSendable) async -> Void
|
||||
) async {
|
||||
await g(ns)
|
||||
// expected-tns-warning @-1 {{sending 'ns' risks causing data races}}
|
||||
// expected-tns-note @-2 {{sending main actor-isolated 'ns' to nonisolated callee risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
// expected-tns-ni-warning @-1 {{sending 'ns' risks causing data races}}
|
||||
// expected-tns-ni-note @-2 {{sending main actor-isolated 'ns' to nonisolated callee risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
|
||||
let f: (NonSendable) async -> () = globalSendable // okay
|
||||
await f(ns)
|
||||
// expected-tns-warning @-1 {{sending 'ns' risks causing data races}}
|
||||
// expected-tns-note @-2 {{sending main actor-isolated 'ns' to nonisolated callee risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
// expected-tns-ni-warning @-1 {{sending 'ns' risks causing data races}}
|
||||
// expected-tns-ni-note @-2 {{sending main actor-isolated 'ns' to nonisolated callee risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
}
|
||||
#endif
|
||||
|
||||
@available(SwiftStdlib 5.1, *)
|
||||
func testLocalCaptures() {
|
||||
@@ -364,7 +383,7 @@ func testLocalCaptures() {
|
||||
@Sendable
|
||||
func a2() -> NonSendable {
|
||||
return ns
|
||||
// expected-complete-and-tns-warning @-1 {{capture of 'ns' with non-Sendable type 'NonSendable' in a '@Sendable' local function}}
|
||||
// expected-tns-warning @-1 {{capture of 'ns' with non-Sendable type 'NonSendable' in a '@Sendable' local function}}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -disable-availability-checking -verify -verify-additional-prefix tns- %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -disable-availability-checking -verify -verify-additional-prefix tns-ni- -verify-additional-prefix tns- %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -disable-availability-checking -verify -verify-additional-prefix tns-ni-ns- -verify-additional-prefix tns- %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// This run validates that for specific test cases around closures, we properly
|
||||
// emit errors in the type checker before we run sns. This ensures that we know that
|
||||
@@ -8,6 +9,7 @@
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: swift_feature_GlobalActorIsolatedTypesUsability
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
////////////////////////
|
||||
// MARK: Declarations //
|
||||
@@ -106,15 +108,15 @@ enum MyEnum<T> {
|
||||
extension MyActor {
|
||||
func warningIfCallingGetter() async {
|
||||
await self.klass.asyncCall() // expected-complete-warning {{passing argument of non-Sendable type 'NonSendableKlass' outside of actor-isolated context may introduce data races}}
|
||||
// expected-tns-warning @-1 {{sending 'self.klass' risks causing data races}}
|
||||
// expected-tns-note @-2 {{sending 'self'-isolated 'self.klass' to nonisolated instance method 'asyncCall()' risks causing data races between nonisolated and 'self'-isolated uses}}
|
||||
// expected-tns-ni-warning @-1 {{sending 'self.klass' risks causing data races}}
|
||||
// expected-tns-ni-note @-2 {{sending 'self'-isolated 'self.klass' to nonisolated instance method 'asyncCall()' risks causing data races between nonisolated and 'self'-isolated uses}}
|
||||
}
|
||||
|
||||
func warningIfCallingAsyncOnFinalField() async {
|
||||
// Since we are calling finalKlass directly, we emit a warning here.
|
||||
await self.finalKlass.asyncCall() // expected-complete-warning {{passing argument of non-Sendable type 'NonSendableKlass' outside of actor-isolated context may introduce data races}}
|
||||
// expected-tns-warning @-1 {{sending 'self.finalKlass' risks causing data races}}
|
||||
// expected-tns-note @-2 {{sending 'self'-isolated 'self.finalKlass' to nonisolated instance method 'asyncCall()' risks causing data races between nonisolated and 'self'-isolated uses}}
|
||||
// expected-tns-ni-warning @-1 {{sending 'self.finalKlass' risks causing data races}}
|
||||
// expected-tns-ni-note @-2 {{sending 'self'-isolated 'self.finalKlass' to nonisolated instance method 'asyncCall()' risks causing data races between nonisolated and 'self'-isolated uses}}
|
||||
}
|
||||
|
||||
// We do not warn on this since we warn in the caller of our getter instead.
|
||||
@@ -127,8 +129,8 @@ extension FinalActor {
|
||||
func warningIfCallingAsyncOnFinalField() async {
|
||||
// Since our whole class is final, we emit the error directly here.
|
||||
await self.klass.asyncCall() // expected-complete-warning {{passing argument of non-Sendable type 'NonSendableKlass' outside of actor-isolated context may introduce data races}}
|
||||
// expected-tns-warning @-1 {{sending 'self.klass' risks causing data races}}
|
||||
// expected-tns-note @-2 {{sending 'self'-isolated 'self.klass' to nonisolated instance method 'asyncCall()' risks causing data races between nonisolated and 'self'-isolated uses}}
|
||||
// expected-tns-ni-warning @-1 {{sending 'self.klass' risks causing data races}}
|
||||
// expected-tns-ni-note @-2 {{sending 'self'-isolated 'self.klass' to nonisolated instance method 'asyncCall()' risks causing data races between nonisolated and 'self'-isolated uses}}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1572,8 +1574,12 @@ func functionArgumentIntoClosure(_ x: @escaping () -> ()) async {
|
||||
let a = MainActorIsolatedKlass()
|
||||
var c = NonSendableKlass()
|
||||
for _ in 0..<1024 {
|
||||
await useValueAsync(c) // expected-tns-warning {{sending 'c' risks causing data races}}
|
||||
// expected-tns-note @-1 {{sending main actor-isolated 'c' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
// This works with nonisolated(nonsending) since the first time through the
|
||||
// loop we are disconnected... meaning that we are ok. The second time
|
||||
// through the loop, we are now main actor isolated, but again b/c we
|
||||
// inherit isolation, we are ok.
|
||||
await useValueAsync(c) // expected-tns-ni-warning {{sending 'c' risks causing data races}}
|
||||
// expected-tns-ni-note @-1 {{sending main actor-isolated 'c' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
// expected-complete-warning @-2 {{passing argument of non-Sendable type 'NonSendableKlass' outside of main actor-isolated context may introduce data races}}
|
||||
c = a.klass
|
||||
}
|
||||
@@ -1583,8 +1589,8 @@ func functionArgumentIntoClosure(_ x: @escaping () -> ()) async {
|
||||
let a = MainActorIsolatedKlass()
|
||||
var c = NonSendableKlass()
|
||||
for _ in 0..<1024 {
|
||||
await useValueAsync(c) // expected-tns-warning {{sending 'c' risks causing data races}}
|
||||
// expected-tns-note @-1 {{sending main actor-isolated 'c' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
await useValueAsync(c) // expected-tns-ni-warning {{sending 'c' risks causing data races}}
|
||||
// expected-tns-ni-note @-1 {{sending main actor-isolated 'c' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
// expected-complete-warning @-2 {{passing argument of non-Sendable type 'NonSendableKlass' outside of main actor-isolated context may introduce data races}}
|
||||
c = a.klassLet
|
||||
}
|
||||
@@ -1832,8 +1838,8 @@ actor FunctionWithSendableResultAndIsolationActor {
|
||||
@MainActor
|
||||
func previouslyBrokenTestCase(ns: NonSendableKlass) async -> SendableGenericStruct? {
|
||||
return await { () -> SendableGenericStruct? in
|
||||
return await ns.getSendableGenericStructAsync() // expected-tns-warning {{sending 'ns' risks causing data races}}
|
||||
// expected-tns-note @-1 {{sending main actor-isolated 'ns' to nonisolated instance method 'getSendableGenericStructAsync()' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
return await ns.getSendableGenericStructAsync() // expected-tns-ni-warning {{sending 'ns' risks causing data races}}
|
||||
// expected-tns-ni-note @-1 {{sending main actor-isolated 'ns' to nonisolated instance method 'getSendableGenericStructAsync()' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
}()
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: swift_feature_GlobalActorIsolatedTypesUsability
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
////////////////////////
|
||||
// MARK: Declarations //
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -parse-as-library -target %target-swift-5.1-abi-triple -swift-version 5 -strict-concurrency=complete %s -o - | %FileCheck %s
|
||||
// RUN: %target-swift-frontend -emit-sil -parse-as-library -target %target-swift-5.1-abi-triple -swift-version 6 -verify %s -o /dev/null
|
||||
// RUN: %target-swift-frontend -emit-sil -parse-as-library -target %target-swift-5.1-abi-triple -swift-version 6 -verify %s -o /dev/null -verify-additional-prefix ni-
|
||||
// RUN: %target-swift-frontend -emit-sil -parse-as-library -target %target-swift-5.1-abi-triple -swift-version 5 -strict-concurrency=complete %s -o - -enable-upcoming-feature NonisolatedNonsendingByDefault | %FileCheck %s
|
||||
// RUN: %target-swift-frontend -emit-sil -parse-as-library -target %target-swift-5.1-abi-triple -swift-version 6 -verify %s -o /dev/null -enable-upcoming-feature NonisolatedNonsendingByDefault -verify-additional-prefix ni-ns-
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: asserts
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
// This test validates the behavior of transfernonsendable around
|
||||
// closure literals
|
||||
@@ -204,8 +207,8 @@ func test_CallerAsyncNormal_CalleeSyncNonIsolated() async {
|
||||
|
||||
// CHECK-LABEL: closure #1 in test_CallerAsyncNormal_CalleeSyncNonIsolated()
|
||||
// CHECK-NEXT: Isolation: global_actor. type: CustomActor
|
||||
await asyncNormalAcceptsClosure { } // expected-error {{sending value of non-Sendable type '() -> ()' risks causing data races}}
|
||||
// expected-note @-1 {{sending global actor 'CustomActor'-isolated value of non-Sendable type '() -> ()' to nonisolated global function 'asyncNormalAcceptsClosure' risks causing races in between global actor 'CustomActor'-isolated and nonisolated uses}}
|
||||
await asyncNormalAcceptsClosure { } // expected-ni-error {{sending value of non-Sendable type '() -> ()' risks causing data races}}
|
||||
// expected-ni-note @-1 {{sending global actor 'CustomActor'-isolated value of non-Sendable type '() -> ()' to nonisolated global function 'asyncNormalAcceptsClosure' risks causing races in between global actor 'CustomActor'-isolated and nonisolated uses}}
|
||||
|
||||
// CHECK-LABEL: closure #2 in test_CallerAsyncNormal_CalleeSyncNonIsolated()
|
||||
// CHECK-NEXT: Isolation: nonisolated
|
||||
@@ -244,8 +247,8 @@ func test_CallerAsyncNormal_CalleeAsyncNonIsolated() async {
|
||||
|
||||
// CHECK-LABEL: closure #1 in test_CallerAsyncNormal_CalleeAsyncNonIsolated()
|
||||
// CHECK-NEXT: Isolation: global_actor. type: CustomActor
|
||||
await asyncNormalAcceptsAsyncClosure { } // expected-error {{sending value of non-Sendable type '() async -> ()' risks causing data races}}
|
||||
// expected-note @-1 {{sending global actor 'CustomActor'-isolated value of non-Sendable type '() async -> ()' to nonisolated global function 'asyncNormalAcceptsAsyncClosure' risks causing races in between global actor 'CustomActor'-isolated and nonisolated uses}}
|
||||
await asyncNormalAcceptsAsyncClosure { } // expected-ni-error {{sending value of non-Sendable type '() async -> ()' risks causing data races}}
|
||||
// expected-ni-note @-1 {{sending global actor 'CustomActor'-isolated value of non-Sendable type '() async -> ()' to nonisolated global function 'asyncNormalAcceptsAsyncClosure' risks causing races in between global actor 'CustomActor'-isolated and nonisolated uses}}
|
||||
|
||||
// CHECK-LABEL: closure #2 in test_CallerAsyncNormal_CalleeAsyncNonIsolated()
|
||||
// CHECK-NEXT: Isolation: nonisolated
|
||||
@@ -432,8 +435,8 @@ extension MyActor {
|
||||
|
||||
// CHECK-LABEL: closure #1 in MyActor.test_CallerAsyncNormal_CalleeSyncNonIsolated()
|
||||
// CHECK-NEXT: Isolation: actor_instance. name: 'self'
|
||||
await asyncNormalAcceptsClosure { print(self) } // expected-error {{sending value of non-Sendable type '() -> ()' risks causing data races}}
|
||||
// expected-note @-1 {{sending 'self'-isolated value of non-Sendable type '() -> ()' to nonisolated global function 'asyncNormalAcceptsClosure' risks causing races in between 'self'-isolated and nonisolated uses}}
|
||||
await asyncNormalAcceptsClosure { print(self) } // expected-ni-error {{sending value of non-Sendable type '() -> ()' risks causing data races}}
|
||||
// expected-ni-note @-1 {{sending 'self'-isolated value of non-Sendable type '() -> ()' to nonisolated global function 'asyncNormalAcceptsClosure' risks causing races in between 'self'-isolated and nonisolated uses}}
|
||||
|
||||
// CHECK-LABEL: closure #2 in MyActor.test_CallerAsyncNormal_CalleeSyncNonIsolated()
|
||||
// CHECK-NEXT: Isolation: nonisolated
|
||||
@@ -473,8 +476,8 @@ extension MyActor {
|
||||
|
||||
// CHECK-LABEL: closure #1 in MyActor.test_CallerAsyncNormal_CalleeAsyncNonIsolated()
|
||||
// CHECK-NEXT: Isolation: actor_instance. name: 'self'
|
||||
await asyncNormalAcceptsAsyncClosure { print(self) } // expected-error {{sending value of non-Sendable type '() async -> ()' risks causing data races}}
|
||||
// expected-note @-1 {{sending 'self'-isolated value of non-Sendable type '() async -> ()' to nonisolated global function 'asyncNormalAcceptsAsyncClosure' risks causing races in between 'self'-isolated and nonisolated uses}}
|
||||
await asyncNormalAcceptsAsyncClosure { print(self) } // expected-ni-error {{sending value of non-Sendable type '() async -> ()' risks causing data races}}
|
||||
// expected-ni-note @-1 {{sending 'self'-isolated value of non-Sendable type '() async -> ()' to nonisolated global function 'asyncNormalAcceptsAsyncClosure' risks causing races in between 'self'-isolated and nonisolated uses}}
|
||||
|
||||
// CHECK-LABEL: closure #2 in MyActor.test_CallerAsyncNormal_CalleeAsyncNonIsolated()
|
||||
// CHECK-NEXT: Isolation: nonisolated
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// RUN: %target-typecheck-verify-swift -swift-version 6
|
||||
// RUN: %target-typecheck-verify-swift -swift-version 6 -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// READ THIS! This file only contains tests that validate that the relevant
|
||||
// function subtyping rules for sending work. Please do not put other tests in
|
||||
@@ -6,6 +7,7 @@
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: asserts
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
////////////////////////
|
||||
// MARK: Declarations //
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify -verify-additional-prefix tns- %s -o /dev/null -parse-as-library -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify -verify-additional-prefix tns-ni- -verify-additional-prefix tns- %s -o /dev/null -parse-as-library -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify -verify-additional-prefix tns-ni-ns- -verify-additional-prefix tns- %s -o /dev/null -parse-as-library -enable-upcoming-feature GlobalActorIsolatedTypesUsability -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: swift_feature_GlobalActorIsolatedTypesUsability
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
////////////////////////
|
||||
// MARK: Declarations //
|
||||
@@ -150,8 +152,8 @@ private struct StructContainingValue { // expected-complete-note 2{{}}
|
||||
var x = StructContainingValue()
|
||||
x.x = firstList
|
||||
|
||||
await transferToNonIsolated(x) // expected-tns-warning {{sending 'x' risks causing data races}}
|
||||
// expected-tns-note @-1 {{sending global actor 'CustomActor'-isolated 'x' to nonisolated global function 'transferToNonIsolated' risks causing data races between nonisolated and global actor 'CustomActor'-isolated uses}}
|
||||
await transferToNonIsolated(x) // expected-tns-ni-warning {{sending 'x' risks causing data races}}
|
||||
// expected-tns-ni-note @-1 {{sending global actor 'CustomActor'-isolated 'x' to nonisolated global function 'transferToNonIsolated' risks causing data races between nonisolated and global actor 'CustomActor'-isolated uses}}
|
||||
// expected-complete-warning @-2 {{passing argument of non-Sendable type 'StructContainingValue' outside of global actor 'CustomActor'-isolated context may introduce data races}}
|
||||
|
||||
useValue(x)
|
||||
@@ -174,8 +176,8 @@ private struct StructContainingValue { // expected-complete-note 2{{}}
|
||||
|
||||
x.1 = firstList
|
||||
|
||||
await transferToNonIsolated(x) // expected-tns-warning {{sending 'x' risks causing data races}}
|
||||
// expected-tns-note @-1 {{sending global actor 'CustomActor'-isolated 'x' to nonisolated global function 'transferToNonIsolated' risks causing data races between nonisolated and global actor 'CustomActor'-isolated uses}}
|
||||
await transferToNonIsolated(x) // expected-tns-ni-warning {{sending 'x' risks causing data races}}
|
||||
// expected-tns-ni-note @-1 {{sending global actor 'CustomActor'-isolated 'x' to nonisolated global function 'transferToNonIsolated' risks causing data races between nonisolated and global actor 'CustomActor'-isolated uses}}
|
||||
// expected-complete-warning @-2 {{passing argument of non-Sendable type '(NonSendableLinkedList<Int>, NonSendableLinkedList<Int>)' outside of global actor 'CustomActor'-isolated context may introduce data races}}
|
||||
// expected-complete-warning @-3 {{passing argument of non-Sendable type '(NonSendableLinkedList<Int>, NonSendableLinkedList<Int>)' outside of global actor 'CustomActor'-isolated context may introduce data races}}
|
||||
|
||||
@@ -195,8 +197,8 @@ struct Clock {
|
||||
// We used to crash when inferring the type for the diagnostic below.
|
||||
@MainActor func testIndirectParametersHandledCorrectly() async {
|
||||
let c = Clock()
|
||||
let _: Int = await c.measure { // expected-tns-warning {{sending value of non-Sendable type '() async -> Int' risks causing data races}}
|
||||
// expected-tns-note @-1 {{sending main actor-isolated value of non-Sendable type '() async -> Int' to nonisolated instance method 'measure' risks causing races in between main actor-isolated and nonisolated uses}}
|
||||
let _: Int = await c.measure { // expected-tns-ni-warning {{sending value of non-Sendable type '() async -> Int' risks causing data races}}
|
||||
// expected-tns-ni-note @-1 {{sending main actor-isolated value of non-Sendable type '() async -> Int' to nonisolated instance method 'measure' risks causing races in between main actor-isolated and nonisolated uses}}
|
||||
try! await c.sleep()
|
||||
}
|
||||
}
|
||||
@@ -255,8 +257,8 @@ struct Clock {
|
||||
|
||||
let erased: () -> Void = closure
|
||||
|
||||
await useValueAsync(erased) // expected-tns-warning {{sending 'erased' risks causing data races}}
|
||||
// expected-tns-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
await useValueAsync(erased) // expected-tns-ni-warning {{sending 'erased' risks causing data races}}
|
||||
// expected-tns-ni-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
// expected-complete-warning @-2 {{passing argument of non-Sendable type '() -> Void' outside of main actor-isolated context may introduce data races}}
|
||||
// expected-complete-note @-3 {{a function type must be marked '@Sendable' to conform to 'Sendable'}}
|
||||
}
|
||||
@@ -264,8 +266,8 @@ struct Clock {
|
||||
@MainActor func synchronousActorIsolatedFunctionError() async {
|
||||
let erased: () -> Void = mainActorFunction
|
||||
|
||||
await useValueAsync(erased) // expected-tns-warning {{sending 'erased' risks causing data races}}
|
||||
// expected-tns-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
await useValueAsync(erased) // expected-tns-ni-warning {{sending 'erased' risks causing data races}}
|
||||
// expected-tns-ni-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
// expected-complete-warning @-2 {{passing argument of non-Sendable type '() -> Void' outside of main actor-isolated context may introduce data races}}
|
||||
// expected-complete-note @-3 {{a function type must be marked '@Sendable' to conform to 'Sendable'}}
|
||||
}
|
||||
@@ -273,8 +275,8 @@ struct Clock {
|
||||
@MainActor func synchronousActorIsolatedGenericFunctionError<T>(_ t: T) async {
|
||||
let erased: (T) -> Void = useValueMainActor
|
||||
|
||||
await useValueAsync(erased) // expected-tns-warning {{sending 'erased' risks causing data races}}
|
||||
// expected-tns-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
await useValueAsync(erased) // expected-tns-ni-warning {{sending 'erased' risks causing data races}}
|
||||
// expected-tns-ni-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
// expected-complete-warning @-2 {{passing argument of non-Sendable type '(T) -> Void' outside of main actor-isolated context may introduce data races}}
|
||||
// expected-complete-note @-3 {{a function type must be marked '@Sendable' to conform to 'Sendable'}}
|
||||
}
|
||||
@@ -287,8 +289,8 @@ struct Clock {
|
||||
let t = Test()
|
||||
let erased: () -> Void = t.foo
|
||||
|
||||
await useValueAsync(erased) // expected-tns-warning {{sending 'erased' risks causing data races}}
|
||||
// expected-tns-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
await useValueAsync(erased) // expected-tns-ni-warning {{sending 'erased' risks causing data races}}
|
||||
// expected-tns-ni-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
// expected-complete-warning @-2 {{passing argument of non-Sendable type '() -> Void' outside of main actor-isolated context may introduce data races}}
|
||||
// expected-complete-note @-3 {{a function type must be marked '@Sendable' to conform to 'Sendable'}}
|
||||
}
|
||||
@@ -301,8 +303,8 @@ struct Clock {
|
||||
let t = Test()
|
||||
let erased: () -> Void = t.foo
|
||||
|
||||
await useValueAsync(erased) // expected-tns-warning {{sending 'erased' risks causing data races}}
|
||||
// expected-tns-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
await useValueAsync(erased) // expected-tns-ni-warning {{sending 'erased' risks causing data races}}
|
||||
// expected-tns-ni-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
// expected-complete-warning @-2 {{passing argument of non-Sendable type '() -> Void' outside of main actor-isolated context may introduce data races}}
|
||||
// expected-complete-note @-3 {{a function type must be marked '@Sendable' to conform to 'Sendable'}}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -swift-version 6 -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -parse-as-library
|
||||
// RUN: %target-swift-frontend -emit-sil -swift-version 6 -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -parse-as-library -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// READ THIS: This test is testing specifically behavior around global actor
|
||||
// isolated types that are nonsendable. This is a bit of a corner case so we use
|
||||
@@ -6,6 +7,7 @@
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: asserts
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
////////////////////////
|
||||
// MARK: Declarations //
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -swift-version 6 -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -parse-as-library
|
||||
// RUN: %target-swift-frontend -emit-sil -swift-version 6 -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -parse-as-library -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
|
||||
// README: Once we loosen the parser so that sending is rejected in Sema
|
||||
// instead of the parser, move into the normal
|
||||
// transfernonsendable_global_actor.swift
|
||||
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
////////////////////////
|
||||
// MARK: Declarations //
|
||||
////////////////////////
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -swift-version 6 -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -parse-as-library
|
||||
// RUN: %target-swift-frontend -emit-sil -swift-version 6 -target %target-swift-5.1-abi-triple -verify -verify-additional-prefix ni- %s -o /dev/null -parse-as-library
|
||||
// RUN: %target-swift-frontend -emit-sil -swift-version 6 -target %target-swift-5.1-abi-triple -verify -verify-additional-prefix ni-ns- %s -o /dev/null -parse-as-library -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// README: This is testing specific patterns around global actors that are
|
||||
// slightly different in between swift 5 and swift 6. The normal global actor
|
||||
@@ -6,6 +7,7 @@
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: asserts
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
////////////////////////
|
||||
// MARK: Declarations //
|
||||
@@ -44,22 +46,22 @@ var booleanFlag: Bool { false }
|
||||
|
||||
let erased: () -> Void = closure
|
||||
|
||||
await useValueAsync(erased) // expected-error {{sending 'erased' risks causing data races}}
|
||||
// expected-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
await useValueAsync(erased) // expected-ni-error {{sending 'erased' risks causing data races}}
|
||||
// expected-ni-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
}
|
||||
|
||||
@MainActor func synchronousActorIsolatedFunctionError() async {
|
||||
let erased: () -> Void = mainActorFunction
|
||||
|
||||
await useValueAsync(erased) // expected-error {{sending 'erased' risks causing data races}}
|
||||
// expected-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
await useValueAsync(erased) // expected-ni-error {{sending 'erased' risks causing data races}}
|
||||
// expected-ni-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
}
|
||||
|
||||
@MainActor func synchronousActorIsolatedGenericFunctionError<T>(_ t: T) async {
|
||||
let erased: (T) -> Void = useValueMainActor
|
||||
|
||||
await useValueAsync(erased) // expected-error {{sending 'erased' risks causing data races}}
|
||||
// expected-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
await useValueAsync(erased) // expected-ni-error {{sending 'erased' risks causing data races}}
|
||||
// expected-ni-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
}
|
||||
|
||||
@MainActor func synchronousActorIsolatedClassMethodError() async {
|
||||
@@ -70,8 +72,8 @@ var booleanFlag: Bool { false }
|
||||
let t = Test()
|
||||
let erased: () -> Void = t.foo
|
||||
|
||||
await useValueAsync(erased) // expected-error {{sending 'erased' risks causing data races}}
|
||||
// expected-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
await useValueAsync(erased) // expected-ni-error {{sending 'erased' risks causing data races}}
|
||||
// expected-ni-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
}
|
||||
|
||||
@MainActor func synchronousActorIsolatedFinalClassMethodError() async {
|
||||
@@ -82,6 +84,6 @@ var booleanFlag: Bool { false }
|
||||
let t = Test()
|
||||
let erased: () -> Void = t.foo
|
||||
|
||||
await useValueAsync(erased) // expected-error {{sending 'erased' risks causing data races}}
|
||||
// expected-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
await useValueAsync(erased) // expected-ni-error {{sending 'erased' risks causing data races}}
|
||||
// expected-ni-note @-1 {{sending main actor-isolated 'erased' to nonisolated global function 'useValueAsync' risks causing data races between nonisolated and main actor-isolated uses}}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -swift-version 6 -verify %s -o /dev/null
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -swift-version 6 -verify %s -o /dev/null -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: asserts
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
// This test validates the behavior of transfernonsendable around initializers.
|
||||
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -disable-availability-checking -verify %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -disable-availability-checking -verify %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: swift_feature_GlobalActorIsolatedTypesUsability
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
// This test validates how we handle partial applies that are isolated to a
|
||||
// specific isolation domain (causing isolation crossings to occur).
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: swift_feature_GlobalActorIsolatedTypesUsability
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
// This test validates behavior of transfernonsendable around nonisolated
|
||||
// functions and fields.
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify -verify-additional-prefix tns- %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify -verify-additional-prefix tns- %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// READ THIS: This test is intended to centralize all tests that use
|
||||
// nonisolated(unsafe).
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: swift_feature_GlobalActorIsolatedTypesUsability
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
////////////////////////
|
||||
// MARK: Declarations //
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -enable-upcoming-feature RegionBasedIsolation -target %target-swift-5.1-abi-triple %s -o /dev/null -import-objc-header %S/Inputs/transfernonsendable_objc.h -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple %s -o /dev/null -import-objc-header %S/Inputs/transfernonsendable_objc.h -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple %s -o /dev/null -import-objc-header %S/Inputs/transfernonsendable_objc.h -enable-upcoming-feature GlobalActorIsolatedTypesUsability -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: objc_interop
|
||||
// REQUIRES: swift_feature_GlobalActorIsolatedTypesUsability
|
||||
// REQUIRES: swift_feature_RegionBasedIsolation
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
import Foundation
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify -enable-upcoming-feature GlobalActorIsolatedTypesUsability %s -o /dev/null
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify -enable-upcoming-feature GlobalActorIsolatedTypesUsability %s -o /dev/null -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// This test validates the behavior of transfer non sendable around ownership
|
||||
// constructs like non copyable types, consuming/borrowing parameters, and inout
|
||||
@@ -6,6 +7,7 @@
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: swift_feature_GlobalActorIsolatedTypesUsability
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
////////////////////////
|
||||
// MARK: Declarations //
|
||||
|
||||
@@ -11,9 +11,11 @@
|
||||
|
||||
// Test swift 6
|
||||
// RUN: %target-swift-frontend -swift-version 6 %s -emit-sil -o /dev/null -verify -verify-additional-prefix swift-6- -parse-as-library -I %t -target %target-swift-5.1-abi-triple
|
||||
// RUN: %target-swift-frontend -swift-version 6 %s -emit-sil -o /dev/null -verify -verify-additional-prefix swift-6- -parse-as-library -I %t -target %target-swift-5.1-abi-triple -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: asserts
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
// README: This test is meant to test the interaction of transfernonsendable and
|
||||
// preconcurrency. Please only keep such tests in this file.
|
||||
|
||||
@@ -11,9 +11,11 @@
|
||||
|
||||
// Test swift 6
|
||||
// RUN: %target-swift-frontend -swift-version 6 %s -emit-sil -o /dev/null -verify -verify-additional-prefix swift-6- -parse-as-library -I %t -target %target-swift-5.1-abi-triple
|
||||
// RUN: %target-swift-frontend -swift-version 6 %s -emit-sil -o /dev/null -verify -verify-additional-prefix swift-6- -parse-as-library -I %t -target %target-swift-5.1-abi-triple -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: asserts
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
// README: This test is meant to test the interaction of transfernonsendable,
|
||||
// preconcurrency, and transferring. Please only keep such tests in this file.
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.1-abi-triple -swift-version 6 -disable-availability-checking -parse-as-library %s -emit-sil -o /dev/null -verify
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.1-abi-triple -swift-version 6 -disable-availability-checking -parse-as-library %s -emit-sil -o /dev/null -verify -verify-additional-prefix ni-
|
||||
// RUN: %target-swift-frontend -target %target-swift-5.1-abi-triple -swift-version 6 -disable-availability-checking -parse-as-library %s -emit-sil -o /dev/null -verify -verify-additional-prefix ni-ns- -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: asserts
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
///////////////////////
|
||||
// MARK: Declaration //
|
||||
@@ -20,9 +22,13 @@ struct CustomActor {
|
||||
class NonSendable {} // expected-note 3{{}}
|
||||
|
||||
func passNonSendable(_: NonSendable) async { }
|
||||
func passTwoNonSendable(_: NonSendable, _: NonSendable) async { }
|
||||
|
||||
func returnsNonSendable() async -> NonSendable { NonSendable() }
|
||||
|
||||
@MainActor
|
||||
func sendToMain<T>(_ t: T) async {}
|
||||
|
||||
@MainActor
|
||||
func mainActorPassNonSendable(_: NonSendable) async { }
|
||||
|
||||
@@ -93,9 +99,22 @@ actor A {
|
||||
func callNonisolatedFuncsFromActor(ns: NonSendable) async {
|
||||
// Non-sendable value passed from nonisolated to actor isolated
|
||||
|
||||
// We do not error in ni-ns since we just merge pass non sendable.
|
||||
await passNonSendable(ns)
|
||||
// expected-error @-1 {{sending 'ns' risks causing data races}}
|
||||
// expected-note @-2 {{sending 'self'-isolated 'ns' to nonisolated global function 'passNonSendable' risks causing data races between nonisolated and 'self'-isolated uses}}
|
||||
// expected-ni-error @-1 {{sending 'ns' risks causing data races}}
|
||||
// expected-ni-note @-2 {{sending 'self'-isolated 'ns' to nonisolated global function 'passNonSendable' risks causing data races between nonisolated and 'self'-isolated uses}}
|
||||
|
||||
// We error here in both modes but in different places. In NI mode, we error
|
||||
// on passing ns to a nonisolated function. With ni-ns, we do not error
|
||||
// there since we inherit isolation from the caller.
|
||||
//
|
||||
// In contrast, when ni-ns is enabled, we error on sendToMain since we merge
|
||||
// ns2 into ns's region causing it to be self-isolated.
|
||||
let ns2 = NonSendable()
|
||||
await passTwoNonSendable(ns, ns2) // expected-ni-error {{sending 'ns' risks causing data races}}
|
||||
// expected-ni-note @-1 {{sending 'self'-isolated 'ns' to nonisolated global function 'passTwoNonSendable' risks causing data races between nonisolated and 'self'-isolated uses}}
|
||||
await sendToMain(ns2) // expected-ni-ns-error {{sending 'ns2' risks causing data races}}
|
||||
// expected-ni-ns-note @-1 {{sending 'self'-isolated 'ns2' to main actor-isolated global function 'sendToMain' risks causing data races between main actor-isolated and 'self'-isolated uses}}
|
||||
|
||||
_ = await returnsNonSendable()
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// RUN: %target-swift-frontend -strict-concurrency=complete -target %target-swift-5.1-abi-triple -parse-as-library -emit-sil -o /dev/null -verify -verify-additional-prefix tns- %s -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -strict-concurrency=complete -target %target-swift-5.1-abi-triple -parse-as-library -emit-sil -o /dev/null -verify -verify-additional-prefix tns- %s -enable-upcoming-feature GlobalActorIsolatedTypesUsability -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: swift_feature_GlobalActorIsolatedTypesUsability
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
/*
|
||||
This file tests the early features of the flow-sensitive Sendable checking implemented by the TransferNonSendable SIL pass.
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -parse-as-library -target %target-swift-5.1-abi-triple -strict-concurrency=complete -verify %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -parse-as-library -target %target-swift-5.1-abi-triple -strict-concurrency=complete -verify -verify-additional-prefix ni- %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -parse-as-library -target %target-swift-5.1-abi-triple -strict-concurrency=complete -verify -verify-additional-prefix ni-ns- %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: swift_feature_GlobalActorIsolatedTypesUsability
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
////////////////////////
|
||||
// MARK: Declarations //
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -parse-as-library -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -parse-as-library -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: swift_feature_GlobalActorIsolatedTypesUsability
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
////////////////////////
|
||||
// MARK: Declarations //
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// RUN: %target-swift-frontend -swift-version 6 -Xllvm -sil-regionbasedisolation-force-use-of-typed-errors -emit-sil -o /dev/null %s -verify -target %target-swift-5.1-abi-triple
|
||||
// RUN: %target-swift-frontend -swift-version 6 -Xllvm -sil-regionbasedisolation-force-use-of-typed-errors -emit-sil -o /dev/null %s -verify -target %target-swift-5.1-abi-triple -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: asserts
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
// READ THIS: This test is only intended to test typed errors that are fallback
|
||||
// error paths that are only invoked if we can't find a name for the value being
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -enable-upcoming-feature RegionBasedIsolation -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -enable-upcoming-feature GlobalActorIsolatedTypesUsability -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: swift_feature_GlobalActorIsolatedTypesUsability
|
||||
// REQUIRES: swift_feature_RegionBasedIsolation
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
// This test makes sure that we treat types with an unavailable Sendable
|
||||
// conformance as being non-Sendable.
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -swift-version 6
|
||||
// RUN: %target-swift-frontend -emit-sil -strict-concurrency=complete -target %target-swift-5.1-abi-triple -verify %s -o /dev/null -swift-version 6 -enable-upcoming-feature NonisolatedNonsendingByDefault
|
||||
|
||||
// REQUIRES: concurrency
|
||||
// REQUIRES: swift_feature_NonisolatedNonsendingByDefault
|
||||
|
||||
// This test makes sure that all of our warnings are errors in swift6 mode.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user