mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
When a NoncopyableGenericsMismatch happens between the compiler and stdlib, allow the compiler to rebuild the stdlib from its interface instead of exiting with an error.
44 lines
1.5 KiB
Swift
44 lines
1.5 KiB
Swift
// RUN: %target-typecheck-verify-swift -enable-experimental-feature NoncopyableGenerics
|
|
|
|
|
|
|
|
protocol RegularProto {}
|
|
protocol NCProto: RegularProto
|
|
where Self: ~Copyable { // expected-error{{'Self' required to be 'Copyable' but is marked with '~Copyable'}}
|
|
func checkIfCopyableSelf(_ s: Self)
|
|
}
|
|
|
|
protocol Hello: ~Copyable {
|
|
func greet(_ s: Self)
|
|
// expected-error@-1 {{parameter of noncopyable type 'Self' must specify ownership}}
|
|
// expected-note@-2 {{add 'borrowing' for an immutable reference}}
|
|
// expected-note@-3 {{add 'inout' for a mutable reference}}
|
|
// expected-note@-4 {{add 'consuming' to take the value from the caller}}
|
|
|
|
func salute(_ s: borrowing Self)
|
|
}
|
|
|
|
struct RegularStruct: Hello {
|
|
func greet(_ s: Self) {}
|
|
func salute(_ s: Self) {}
|
|
}
|
|
|
|
struct NCThinger<T: ~Copyable>: ~Copyable, Hello {
|
|
let fd: Int = 0
|
|
deinit {}
|
|
|
|
func greet(_ f: Self) {}
|
|
// expected-error@-1 {{parameter of noncopyable type 'NCThinger<T>' must specify ownership}}
|
|
// expected-note@-2 {{add 'borrowing' for an immutable reference}}
|
|
// expected-note@-3 {{add 'inout' for a mutable reference}}
|
|
// expected-note@-4 {{add 'consuming' to take the value from the caller}}
|
|
|
|
func salute(_ s: borrowing Self) {}
|
|
|
|
func setThinger(_ t: T) {}
|
|
// expected-error@-1 {{parameter of noncopyable type 'T' must specify ownership}}
|
|
// expected-note@-2 {{add 'borrowing' for an immutable reference}}
|
|
// expected-note@-3 {{add 'inout' for a mutable reference}}
|
|
// expected-note@-4 {{add 'consuming' to take the value from the caller}}
|
|
}
|