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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
// RUN: %target-swift-emit-silgen %s | %FileCheck %s
// Test for compilation order independence
class C : B {
// foo inherited from B
override func bar() {}
// bas inherited from A
override func qux() {}
func flux() {}
// zim inherited from B
override func zang() {}
required init(int i: Int) { }
func flopsy() {}
func mopsy() {}
}
// CHECK: sil_vtable C {
// CHECK: #A.foo: {{.*}} : @$s7vtables1BC3foo{{[_0-9a-zA-Z]*}}F
// CHECK: #A.bar: {{.*}} : @$s7vtables1CC3bar{{[_0-9a-zA-Z]*}}F
// CHECK: #A.bas: {{.*}} : @$s7vtables1AC3bas{{[_0-9a-zA-Z]*}}F
// CHECK: #A.qux: {{.*}} : @$s7vtables1CC3qux{{[_0-9a-zA-Z]*}}F
// CHECK: #A.flux: {{.*}} : @$s7vtables1BC4flux{{[_0-9a-zA-Z]*}}F
// CHECK: #B.init!allocator: {{.*}} : @$s7vtables1CC{{[_0-9a-zA-Z]*}}fC
// CHECK: #B.zim: {{.*}} : @$s7vtables1BC3zim{{[_0-9a-zA-Z]*}}F
// CHECK: #B.zang: {{.*}} : @$s7vtables1CC4zang{{[_0-9a-zA-Z]*}}F
// CHECK: #C.flux: {{.*}} : @$s7vtables1CC4flux{{[_0-9a-zA-Z]*}}F
// CHECK: #C.flopsy: {{.*}} : @$s7vtables1CC6flopsy{{[_0-9a-zA-Z]*}}F
// CHECK: #C.mopsy: {{.*}} : @$s7vtables1CC5mopsy{{[_0-9a-zA-Z]*}}F
// CHECK: }
class A {
func foo() {}
func bar() {}
func bas() {}
func qux() {}
func flux() {}
}
// CHECK: sil_vtable A {
// CHECK: #A.foo: {{.*}} : @$s7vtables1AC3foo{{[_0-9a-zA-Z]*}}F
// CHECK: #A.bar: {{.*}} : @$s7vtables1AC3bar{{[_0-9a-zA-Z]*}}F
// CHECK: #A.bas: {{.*}} : @$s7vtables1AC3bas{{[_0-9a-zA-Z]*}}F
// CHECK: #A.qux: {{.*}} : @$s7vtables1AC3qux{{[_0-9a-zA-Z]*}}F
// CHECK: #A.flux: {{.*}} : @$s7vtables1AC4flux{{[_0-9a-zA-Z]*}}F
// CHECK: #A.init!allocator: {{.*}} : @$s7vtables1AC{{[_0-9a-zA-Z]*}}fC
// CHECK: }
class B : A {
required init(int i: Int) { }
override func foo() {}
// bar inherited from A
// bas inherited from A
override func qux() {}
@available(*, unavailable) override func flux() {}
func zim() {}
func zang() {}
}
// CHECK: sil_vtable B {
// CHECK: #A.foo: {{.*}} : @$s7vtables1BC3foo{{[_0-9a-zA-Z]*}}F
// CHECK: #A.bar: {{.*}} : @$s7vtables1AC3bar{{[_0-9a-zA-Z]*}}F
// CHECK: #A.bas: {{.*}} : @$s7vtables1AC3bas{{[_0-9a-zA-Z]*}}F
// CHECK: #A.qux: {{.*}} : @$s7vtables1BC3qux{{[_0-9a-zA-Z]*}}F
// CHECK: #A.flux: {{.*}} : @$s7vtables1BC4flux{{[_0-9a-zA-Z]*}}F
// CHECK: #B.init!allocator: {{.*}} : @$s7vtables1BC{{[_0-9a-zA-Z]*}}fC
// CHECK: #B.zim: {{.*}} : @$s7vtables1BC3zim{{[_0-9a-zA-Z]*}}F
// CHECK: #B.zang: {{.*}} : @$s7vtables1BC4zang{{[_0-9a-zA-Z]*}}F
// CHECK: }
// CHECK: sil_vtable RequiredInitDerived {
// CHECK-NEXT: #SimpleInitBase.init!allocator: {{.*}} : @$s7vtables19RequiredInitDerivedC{{[_0-9a-zA-Z]*}}fC
// CHECK-NEXT: #RequiredInitDerived.deinit!deallocator: @$s7vtables19RequiredInitDerivedCfD
// CHECK-NEXT: }
class SimpleInitBase { }
class RequiredInitDerived : SimpleInitBase {
required override init() { }
}
class Observed {
var x: Int = 0 {
didSet {
}
willSet {
}
}
}
// rdar://problem/21298214
class BaseWithDefaults {
func a(_ object: AnyObject? = nil) {}
}
class DerivedWithoutDefaults : BaseWithDefaults {
override func a(_ object: AnyObject?) {
super.a(object)
}
}
// CHECK-LABEL: sil_vtable Observed {
// CHECK-NOT: #Observed.x!didSet
// CHECK-NOT: #Observed.x!willSet
// CHECK: #Observed.x!getter
// CHECK: #Observed.x!setter
// CHECK-LABEL: sil_vtable DerivedWithoutDefaults {
// CHECK: #BaseWithDefaults.a: {{.*}} : @$s7vtables22DerivedWithoutDefaultsC1a{{[_0-9a-zA-Z]*}}F
// Escape identifiers that represent special names
class SubscriptAsFunction {
func `subscript`() {}
}
// CHECK-LABEL: sil_vtable SubscriptAsFunction {
// CHECK-NOT: #SubscriptAsFunction.subscript
// CHECK: #SubscriptAsFunction.`subscript`:
class DeinitAsFunction {
func `deinit`() {}
}
// CHECK-LABEL: sil_vtable DeinitAsFunction {
// CHECK: #DeinitAsFunction.`deinit`:
// CHECK: #DeinitAsFunction.deinit!deallocator
|