mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
69 lines
1.9 KiB
Swift
69 lines
1.9 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %s -module-name Test -enable-experimental-feature SuppressedAssociatedTypes
|
|
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface) -module-name Test
|
|
// RUN: %FileCheck %s < %t.swiftinterface
|
|
|
|
// CHECK: #if compiler(>=5.3) && $NoncopyableGenerics
|
|
// CHECK: public protocol P : ~Copyable {
|
|
// CHECK: associatedtype A : ~Copyable
|
|
// CHECK: }
|
|
// CHECK: #else
|
|
// CHECK: public protocol P {
|
|
// CHECK: associatedtype A
|
|
// CHECK: }
|
|
// CHECK: #endif
|
|
public protocol P: ~Copyable {
|
|
associatedtype A: ~Copyable
|
|
}
|
|
|
|
// CHECK: #if compiler(>=5.3) && $NoncopyableGenerics
|
|
// CHECK: public struct X<T> : ~Swift.Copyable where T : ~Copyable {
|
|
// CHECK: }
|
|
// CHECK: #else
|
|
// CHECK: public struct X<T> {
|
|
// CHECK: }
|
|
// CHECK: #endif
|
|
public struct X<T: ~Copyable>: ~Copyable { }
|
|
|
|
// CHECK: #if compiler(>=5.3) && $NoncopyableGenerics
|
|
// CHECK: extension Test.X : Swift.Copyable {
|
|
// CHECK-NEXT: func f()
|
|
// CHECK: }
|
|
// CHECK: #else
|
|
// CHECK: extension Test.X {
|
|
// CHECK-NEXT: func f()
|
|
// CHECK: }
|
|
extension X: Copyable {
|
|
public func f() { }
|
|
}
|
|
|
|
// CHECK: #if compiler(>=5.3) && $NoncopyableGenerics
|
|
// CHECK: extension Test.X where T : ~Copyable {
|
|
// CHECK: public func g(other: borrowing T)
|
|
// CHECK: }
|
|
// CHECK: #else
|
|
// CHECK: extension Test.X {
|
|
// CHECK: public func g(other: borrowing T)
|
|
// CHECK: }
|
|
// CHECK: #endif
|
|
extension X where T: ~Copyable {
|
|
public func g(other: borrowing T) { }
|
|
}
|
|
|
|
// CHECK: #if compiler(>=5.3) && $NoncopyableGenerics
|
|
// CHECK: public enum Y<T> : ~Swift.Copyable where T : ~Copyable {
|
|
// CHECK: case none
|
|
// CHECK: case some(T)
|
|
// CHECK: }
|
|
// CHECK: #else
|
|
// CHECK: public enum Y<T> {
|
|
// CHECK: case none
|
|
// CHECK: case some(T)
|
|
// CHECK: }
|
|
public enum Y<T: ~Copyable>: ~Copyable {
|
|
case none
|
|
case some(T)
|
|
}
|
|
|
|
extension Y: Copyable where T: Copyable { }
|