blob: e90c65026e3e34fa8cc2ff4b9ee372552b1d7801 [file] [log] [blame]
// RUN: %target-swift-frontend %s -emit-silgen | %FileCheck %s
sil_stage raw
import Builtin
import Swift
enum X {
case onetransp
case twotransp
}
sil @_TTWO5test21Xs9EquatableS_FS1_oi2eeUS1___fMQPS1_FT3lhsS2_3rhsS2__Sb : $@convention(witness_method: Equatable) (@in X, @in X, @thick X.Type) -> Bool {
bb0(%0 : $*X, %1 : $*X, %2 : $@thick X.Type):
%3 = load %0 : $*X
%4 = load %1 : $*X
%5 = function_ref @_TF5test2oi2eeFTOS_1XS0__Sb : $@convention(thin) (X, X) -> Bool
%6 = apply %5(%3, %4) : $@convention(thin) (X, X) -> Bool
return %6 : $Bool
}
sil @_TTWO5test21Xs8HashableS_FS1_g9hashValueSi : $@convention(witness_method: Hashable) (@inout X) -> Int {
bb0(%0 : $*X):
%1 = load %0 : $*X
%2 = function_ref @_TFO5test21Xg9hashValueSi : $@convention(method) (X) -> Int
%3 = apply %2(%1) : $@convention(method) (X) -> Int
return %3 : $Int
}
sil @_TF5test2oi2eeFTOS_1XS0__Sb : $@convention(thin) (X, X) -> Bool
sil @_TFO5test21Xg9hashValueSi : $@convention(method) (X) -> Int
// CHECK-LABEL: sil_witness_table X: Equatable module
// CHECK: method #Equatable."=="!1: {{.*}} : @_TTWO5test21Xs9EquatableS_FS1_oi2eeUS1___fMQPS1_FT3lhsS2_3rhsS2__Sb
sil_witness_table X: Equatable module test2 {
method #Equatable."=="!1: @_TTWO5test21Xs9EquatableS_FS1_oi2eeUS1___fMQPS1_FT3lhsS2_3rhsS2__Sb
}
// CHECK-LABEL: sil_witness_table X: Hashable module
// CHECK: base_protocol Equatable: X: Equatable module
// CHECK: method #Hashable.hashValue!getter.1: {{.*}} : @_TTWO5test21Xs8HashableS_FS1_g9hashValueSi
sil_witness_table X: Hashable module test2 {
base_protocol Equatable: X: Equatable module test2
method #Hashable.hashValue!getter.1: @_TTWO5test21Xs8HashableS_FS1_g9hashValueSi
}