| // RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil %s -module-name=witness_tables -enable-resilience | %target-sil-opt -assume-parsing-unqualified-ownership-sil -module-name=witness_tables -enable-resilience | %FileCheck %s |
| // RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil %s -module-name=witness_tables -enable-resilience -O | %FileCheck %s |
| |
| sil_stage raw |
| |
| public protocol Proto {} |
| public struct Wrapper<T>: Proto { } |
| |
| public protocol ResilientProtocol { |
| associatedtype T : Proto = Wrapper<Self> |
| func noDefaultA() |
| func noDefaultB() |
| func defaultC() |
| func defaultD() |
| func defaultE() |
| } |
| |
| // CHECK-LABEL: sil @defaultC : $@convention(witness_method: ResilientProtocol) <Self where Self : ResilientProtocol> (@in_guaranteed Self) -> () |
| sil @defaultC : $@convention(witness_method: ResilientProtocol) <Self where Self : ResilientProtocol> (@in_guaranteed Self) -> () { |
| bb0(%0 : $*Self): |
| %result = tuple () |
| return %result : $() |
| } |
| |
| |
| // CHECK-LABEL: sil @defaultD : $@convention(witness_method: ResilientProtocol) <Self where Self : ResilientProtocol> (@in_guaranteed Self) -> () |
| sil @defaultD : $@convention(witness_method: ResilientProtocol) <Self where Self : ResilientProtocol> (@in_guaranteed Self) -> () { |
| bb0(%0 : $*Self): |
| %result = tuple () |
| return %result : $() |
| } |
| |
| |
| // CHECK-LABEL: sil @defaultE |
| sil public_external @defaultE : $@convention(witness_method: ResilientProtocol) <Self where Self : ResilientProtocol> (@in_guaranteed Self) -> () |
| |
| |
| protocol InternalProtocol { |
| func defaultF() |
| } |
| |
| // CHECK-LABEL: sil hidden @defaultF |
| sil hidden @defaultF : $@convention(witness_method: InternalProtocol) <Self where Self : InternalProtocol> (@in_guaranteed Self) -> () { |
| bb0(%0 : $*Self): |
| %result = tuple () |
| return %result : $() |
| } |
| |
| |
| // CHECK-LABEL: sil_default_witness_table ResilientProtocol { |
| // CHECK: associated_type_protocol (T: Proto): Wrapper<Self>: specialize <Self> (<T> Wrapper<T>: Proto module witness_tables) |
| // CHECK: associated_type T: Wrapper<Self> |
| // CHECK: no_default |
| // CHECK: no_default |
| // CHECK: method #ResilientProtocol.defaultC!1: {{.*}} : @defaultC |
| // CHECK: method #ResilientProtocol.defaultD!1: {{.*}} : @defaultD |
| // CHECK: method #ResilientProtocol.defaultE!1: {{.*}} : @defaultE |
| // CHECK: } |
| |
| sil_default_witness_table ResilientProtocol { |
| associated_type_protocol (T: Proto): Wrapper<Self>: specialize <Self> (<T> Wrapper<T>: Proto module witness_tables) |
| associated_type T: Wrapper<Self> |
| no_default |
| no_default |
| method #ResilientProtocol.defaultC!1: @defaultC |
| method #ResilientProtocol.defaultD!1: @defaultD |
| method #ResilientProtocol.defaultE!1: @defaultE |
| } |
| |
| |
| // CHECK-LABEL: sil_default_witness_table hidden InternalProtocol { |
| // CHECK: method #InternalProtocol.defaultF!1: {{.*}} : @defaultF |
| // CHECK: } |
| |
| sil_default_witness_table hidden InternalProtocol { |
| method #InternalProtocol.defaultF!1: @defaultF |
| } |