// RUN: %target-sil-opt -enable-sil-verify-all -module-name="SILDeclRef" %s // Check that SILDeclRefs with interface types can be parsed properly. sil_stage canonical import Builtin import Swift import SwiftShims public protocol P { func foo() -> Int32 func foo(n: Int32) } extension P { func boo() -> Int32 } public class Base : P { public func foo() -> Int32 public func foo(n: Int32) public func foo(f: Float) -> Int32 deinit init() } public class Derived1 : Base { override public func foo() -> Int32 override public func foo(n: Int32) override public func foo(f: Float) -> Int32 deinit override init() } public class Derived2 : Base { override public func foo() -> Int32 override public func foo(n: Int32) override public func foo(f: Float) -> Int32 deinit override init() } public func testP(p: P) -> Int32 public func testBase(b: Base) -> Int32 // P.boo() -> Int32 sil @_TFE10SILDeclRefPS_1P3boofT_Vs5Int32 : $@convention(method) (@in_guaranteed Self) -> Int32 // Int32.init(_builtinIntegerLiteral : Builtin.IntLiteral) -> Int32 sil public_external [transparent] [serialized] @_TFVs5Int32CfT22_builtinIntegerLiteralBI__S_ : $@convention(method) (Builtin.IntLiteral, @thin Int32.Type) -> Int32 // Base.foo() -> Int32 sil @_TFC10SILDeclRef4Base3foofT_Vs5Int32 : $@convention(method) (@guaranteed Base) -> Int32 // Base.foo(n : Int32) -> () sil @_TFC10SILDeclRef4Base3foofT1nVs5Int32_T_ : $@convention(method) (Int32, @guaranteed Base) -> () // Base.foo(f : Float) -> Int32 sil @_TFC10SILDeclRef4Base3foofT1fSf_Vs5Int32 : $@convention(method) (Float, @guaranteed Base) -> Int32 // Base.__deallocating_deinit sil @_TFC10SILDeclRef4BaseD : $@convention(method) (@owned Base) -> () // Base.deinit sil @_TFC10SILDeclRef4Based : $@convention(method) (@guaranteed Base) -> @owned Builtin.NativeObject // Base.init() -> Base sil @_TFC10SILDeclRef4BasecfT_S0_ : $@convention(method) (@owned Base) -> @owned Base // protocol witness for P.foo() -> Int32 in conformance Base sil [transparent] [thunk] @_TTWC10SILDeclRef4BaseS_1PS_FS1_3foofT_Vs5Int32 : $@convention(witness_method: P) (@in_guaranteed Base) -> Int32 // protocol witness for P.foo(n : Int32) -> () in conformance Base sil [transparent] [thunk] @_TTWC10SILDeclRef4BaseS_1PS_FS1_3foofT1nVs5Int32_T_ : $@convention(witness_method: P) (Int32, @in_guaranteed Base) -> () // Derived1.foo() -> Int32 sil @_TFC10SILDeclRef8Derived13foofT_Vs5Int32 : $@convention(method) (@guaranteed Derived1) -> Int32 // Derived1.foo(n : Int32) -> () sil @_TFC10SILDeclRef8Derived13foofT1nVs5Int32_T_ : $@convention(method) (Int32, @guaranteed Derived1) -> () // Derived1.foo(f : Float) -> Int32 sil @_TFC10SILDeclRef8Derived13foofT1fSf_Vs5Int32 : $@convention(method) (Float, @guaranteed Derived1) -> Int32 // Derived1.__deallocating_deinit sil @_TFC10SILDeclRef8Derived1D : $@convention(method) (@owned Derived1) -> () // Derived1.deinit sil @_TFC10SILDeclRef8Derived1d : $@convention(method) (@guaranteed Derived1) -> @owned Builtin.NativeObject // Derived1.init() -> Derived1 sil @_TFC10SILDeclRef8Derived1cfT_S0_ : $@convention(method) (@owned Derived1) -> @owned Derived1 // Derived2.foo() -> Int32 sil @_TFC10SILDeclRef8Derived23foofT_Vs5Int32 : $@convention(method) (@guaranteed Derived2) -> Int32 // Derived2.foo(n : Int32) -> () sil @_TFC10SILDeclRef8Derived23foofT1nVs5Int32_T_ : $@convention(method) (Int32, @guaranteed Derived2) -> () // Derived2.foo(f : Float) -> Int32 sil @_TFC10SILDeclRef8Derived23foofT1fSf_Vs5Int32 : $@convention(method) (Float, @guaranteed Derived2) -> Int32 // Derived2.__deallocating_deinit sil @_TFC10SILDeclRef8Derived2D : $@convention(method) (@owned Derived2) -> () // Derived2.deinit sil @_TFC10SILDeclRef8Derived2d : $@convention(method) (@guaranteed Derived2) -> @owned Builtin.NativeObject // Derived2.init() -> Derived2 sil @_TFC10SILDeclRef8Derived2cfT_S0_ : $@convention(method) (@owned Derived2) -> @owned Derived2 // testP(p : P) -> Int32 sil @_TF10SILDeclRef5testPFT1pPS_1P__Vs5Int32 : $@convention(thin) (@in P) -> Int32 // testBase(b : Base) -> Int32 sil @_TF10SILDeclRef8testBaseFT1bCS_4Base_Vs5Int32 : $@convention(thin) (@owned Base) -> Int32 sil_vtable Derived1 { #Base.foo: (Base) -> () -> Int32 : @_TFC10SILDeclRef8Derived13foofT_Vs5Int32 // Derived1.foo() -> Int32 #Base.foo: (Base) -> (Int32) -> () : @_TFC10SILDeclRef8Derived13foofT1nVs5Int32_T_ // Derived1.foo(n : Int32) -> () #Base.foo: (Base) -> (Float) -> Int32 : @_TFC10SILDeclRef8Derived13foofT1fSf_Vs5Int32 // Derived1.foo(f : Float) -> Int32 #Base.init!initializer: (Base.Type) -> () -> Base : @_TFC10SILDeclRef8Derived1cfT_S0_ // Derived1.init() -> Derived1 #Derived1.deinit!deallocator: (Derived1) -> () -> () : @_TFC10SILDeclRef8Derived1D // Derived1.__deallocating_deinit } sil_vtable Derived2 { #Base.foo: (Base) -> () -> Int32 : @_TFC10SILDeclRef8Derived23foofT_Vs5Int32 // Derived2.foo() -> Int32 #Base.foo: (Base) -> (Int32) -> () : @_TFC10SILDeclRef8Derived23foofT1nVs5Int32_T_ // Derived2.foo(n : Int32) -> () #Base.foo: (Base) -> (Float) -> Int32 : @_TFC10SILDeclRef8Derived23foofT1fSf_Vs5Int32 // Derived2.foo(f : Float) -> Int32 #Base.init!initializer: (Base.Type) -> () -> Base : @_TFC10SILDeclRef8Derived2cfT_S0_ // Derived2.init() -> Derived2 #Derived2.deinit!deallocator: (Derived2) -> () -> () : @_TFC10SILDeclRef8Derived2D // Derived2.__deallocating_deinit } sil_witness_table [serialized] Base: P module SILDeclRef { method #P.foo: (Self) -> () -> Int32 : @_TTWC10SILDeclRef4BaseS_1PS_FS1_3foofT_Vs5Int32 // protocol witness for P.foo() -> Int32 in conformance Base method #P.foo: (Self) -> (Int32) -> () : @_TTWC10SILDeclRef4BaseS_1PS_FS1_3foofT1nVs5Int32_T_ // protocol witness for P.foo(n : Int32) -> () in conformance Base } sil_default_witness_table P { no_default no_default }