Files
swift-mirror/test/Generics/inverse_scoping.swift
Kavon Farvardin 9071d1e0a7 Test: split out some tests using SuppressedAssociatedTypes
There's about to be a second version that I'd like to
test in parallel with the old version.
2025-11-20 14:29:04 -08:00

57 lines
2.7 KiB
Swift

// RUN: %target-typecheck-verify-swift
protocol NoCopyReq: ~Copyable {}
protocol P {
func f() where Self: ~Copyable // expected-error {{cannot suppress '~Copyable' on generic parameter 'Self' defined in outer scope}}
// expected-error@-1 {{'Self' required to be 'Copyable' but is marked with '~Copyable'}}
func g<T>(_: T) where Self: ~Copyable // expected-error {{cannot suppress '~Copyable' on generic parameter 'Self' defined in outer scope}}
// expected-error@-1 {{'Self' required to be 'Copyable' but is marked with '~Copyable'}}
}
protocol U {}
extension U where Self: ~Copyable {}
// expected-error@-1 {{'Self' required to be 'Copyable' but is marked with '~Copyable'}}
extension P where Self: ~Copyable { // expected-error {{'Self' required to be 'Copyable' but is marked with '~Copyable'}}
func g() where Self: ~Copyable, // expected-error {{cannot suppress '~Copyable' on generic parameter 'Self' defined in outer scope}}
// expected-error@-1 {{'Self' required to be 'Copyable' but is marked with '~Copyable'}}
Self: ~Escapable {} // expected-error {{cannot suppress '~Escapable' on generic parameter 'Self' defined in outer scope}}
// expected-error@-1 {{'Self' required to be 'Escapable' but is marked with '~Escapable'}}
typealias Me = Self where Self: ~Copyable // expected-error {{cannot suppress '~Copyable' on generic parameter 'Self' defined in outer scope}}
// expected-error@-1 {{'Self' required to be 'Copyable' but is marked with '~Copyable'}}
typealias MeAndU = Self where Self: U
}
struct S<T> {
// expected-note@+2 3{{add}}
// expected-error@+1 {{parameter of noncopyable type 'U' must specify ownership}}
func fn<U>(_ u: U)
where T: ~Copyable, // expected-error {{cannot suppress '~Copyable' on generic parameter 'T' defined in outer scope}}
// expected-error@-1 {{'T' required to be 'Copyable' but is marked with '~Copyable'}}
U: ~Copyable
{}
func onlyCopyable() where T: Copyable {}
func fn<U>(_ u: U)
where T: ~Escapable, // expected-error {{cannot suppress '~Escapable' on generic parameter 'T' defined in outer scope}}
// expected-error@-1 {{'T' required to be 'Escapable' but is marked with '~Escapable'}}
U: ~Escapable
{}
}
extension S where T: NoCopyReq & ~Copyable {}
// expected-error@-1 {{'T' required to be 'Copyable' but is marked with '~Copyable'}}
struct ExtraInverse<T: ~Copyable> {
func check() where T: ~Copyable {} // expected-error {{cannot suppress '~Copyable' on generic parameter 'T' defined in outer scope}}
}