1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend -emit-ir -o - %s -module-name test \
// RUN: -enable-experimental-feature SuppressedAssociatedTypes \
// RUN: -enable-experimental-feature NonescapableTypes \
// RUN: -parse-as-library \
// RUN: -enable-library-evolution \
// RUN: -g \
// RUN: > %t/test.irgen
// RUN: %FileCheck %s < %t/test.irgen
public protocol P: ~Copyable { }
public struct CallMe<U: ~Copyable> {
public enum Maybe<T: ~Copyable>: ~Copyable {
// CHECK-LABEL: @"$s4test6CallMeV5MaybeOAARi_zrlE4someyAEyx_qd__Gqd__cAGmr__lFWC"
// CHECK: @"$s4test6CallMeV5MaybeOAARi_zrlE4noneyAEyx_qd__GAGmr__lFWC"
case none
case some(T)
}
}
extension CallMe {
public enum Box<T: ~Copyable>: ~Copyable {
// CHECK-LABEL: @"$s4test6CallMeV3BoxO4someyAEyx_qd__Gqd__cAGmr__lFWC"
// CHECK: @"$s4test6CallMeV3BoxO4noneyAEyx_qd__GAGmr__lFWC"
case none
case some(T)
}
}
// CHECK: @"$s4test13ManagedBufferC12_doNotCallMeACyxq_Gyt_tcfCTq"
public protocol Hello<Person>: ~Copyable {
// CHECK: @"$s4test5HelloP6PersonAC_AA1PTn"
// CHECK: @"$s6Person4test5HelloPTl" =
associatedtype Person: P & ~Copyable
// CHECK: @"$s4test5HelloP14favoritePerson0D0QzvrTq" =
var favoritePerson: Person { get }
// CHECK: @"$s4test5HelloP5greetyy6PersonQzFTq"
func greet(_ person: borrowing Person)
// CHECK: @"$s4test5HelloP10overloadedyyqd__lFTj"
func overloaded<T>(_: borrowing T)
// CHECK: @"$s4test5HelloP10overloadedyyqd__Ri_d__lFTj"
func overloaded<T: ~Copyable>(_: borrowing T)
}
// CHECK: $s4test2XQVAARi_zrlE1AVMi
protocol Q: ~Copyable {
associatedtype A: ~Copyable
}
struct XQ<T: ~Copyable>: ~Copyable {
}
extension XQ: Q where T: ~Copyable {
struct A { }
}
protocol HasResult {
associatedtype Success
}
extension Result: HasResult {
func testMe() -> Success? {
var x: Result.Success? = nil
if case let .success(s) = self {
x = s
}
return x
}
}
// Class metadata
@_fixed_layout
open class ManagedBuffer<Header, Element: ~Copyable> {
@_preInverseGenerics
public final var header: Header
// CHECK: @"$s4test13ManagedBufferC12_doNotCallMeACyxq_Gyt_tcfCTj"
@_preInverseGenerics
@usableFromInline
internal init(_doNotCallMe: ()) {
fatalError("boom")
}
}
extension UnsafePointer {
struct AtomicRepresentation { }
}
// CHECK: $sSP4testE20AtomicRepresentationVySi_GD
func useAtomicRepresentation() {
let x = UnsafePointer<Int>.AtomicRepresentation()
print(x)
}
struct Box<Wrapped: ~Copyable>: ~Copyable { }
struct List<Element: ~Copyable>: ~Copyable {
// CHECK: $s4test4ListVAARi_zrlE4NodeVwst
struct Node: ~Copyable {
var element: Element
var next: Link
}
typealias Link = Box<Node>?
var head: Link
}
|