File: witness_tables.sil

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (117 lines) | stat: -rw-r--r-- 4,118 bytes parent folder | download
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
// RUN: %target-sil-opt %s -module-name=witness_tables | %target-sil-opt -module-name=witness_tables | %FileCheck %s

protocol AssocReqt {
  func requiredMethod()
}

struct ConformingAssoc : AssocReqt {
  func requiredMethod()
}

sil @_TFV14witness_tables15ConformingAssoc14requiredMethodfS0_FT_T_ : $@convention(method) (ConformingAssoc) -> () {
bb0(%0 : $ConformingAssoc):
  debug_value %0 : $ConformingAssoc
  %2 = tuple ()
  return %2 : $()
}

sil @_TTWV14witness_tables15ConformingAssocS_9AssocReqtS_FS1_14requiredMethodU_fRQPS1_FT_T_ : $@convention(witness_method: AssocReqt) (@inout ConformingAssoc) -> () {
bb0(%0 : $*ConformingAssoc):
  %1 = load %0 : $*ConformingAssoc
  %2 = function_ref @_TFV14witness_tables15ConformingAssoc14requiredMethodfS0_FT_T_ : $@convention(method) (ConformingAssoc) -> ()
  %3 = apply %2(%1) : $@convention(method) (ConformingAssoc) -> ()
  return %3 : $()
}

// CHECK-LABEL: sil_witness_table ConformingAssoc: AssocReqt module witness_tables {
// CHECK: #AssocReqt.requiredMethod: {{.*}} : @_TTWV14witness_tables15ConformingAssocS_9AssocReqtS_FS1_14requiredMethodU_fRQPS1_FT_T_
// CHECK: }
sil_witness_table ConformingAssoc: AssocReqt module witness_tables {
  method #AssocReqt.requiredMethod: @_TTWV14witness_tables15ConformingAssocS_9AssocReqtS_FS1_14requiredMethodU_fRQPS1_FT_T_
}

protocol AnyProtocol {
  associatedtype AssocType
  associatedtype AssocWithReqt : AssocReqt
  func assocTypesMethod(x: AssocType, y: AssocWithReqt)
  static func staticMethod(x: Self)
}
class SomeAssoc {
}
protocol InheritedProtocol1 : AnyProtocol {
  func inheritedMethod()
}
struct InheritedConformance : InheritedProtocol1 {
  typealias AssocType = SomeAssoc
  typealias AssocWithReqt = ConformingAssoc
  func assocTypesMethod(x: SomeAssoc, y: ConformingAssoc)
  static func staticMethod(x: InheritedConformance)
  func inheritedMethod()
}
struct InheritedConformance2 : InheritedProtocol1 {
  typealias AssocType = SomeAssoc
  typealias AssocWithReqt = ConformingAssoc
  func assocTypesMethod(x: SomeAssoc, y: ConformingAssoc)
  static func staticMethod(x: InheritedConformance2)
  func inheritedMethod()
}


// CHECK-LABEL: sil_witness_table InheritedConformance: InheritedProtocol1 module
// CHECK: base_protocol AnyProtocol: InheritedConformance: AnyProtocol module
// CHECK: }
sil_witness_table InheritedConformance: InheritedProtocol1 module witness_tables {
  base_protocol AnyProtocol: InheritedConformance: AnyProtocol module witness_tables
}

// CHECK-LABEL: sil_witness_table shared InheritedConformance: AnyProtocol module
// CHECK: associated_type AssocType: SomeAssoc
// CHECK: associated_type_protocol (AssocWithReqt: AssocReqt): ConformingAssoc: AssocReqt module
// CHECK: }
sil_witness_table shared InheritedConformance: AnyProtocol module witness_tables {
  associated_type AssocType: SomeAssoc
  associated_type_protocol (AssocWithReqt: AssocReqt): ConformingAssoc: AssocReqt module witness_tables
}

// CHECK-LABEL: sil_witness_table InheritedConformance2: InheritedProtocol1 module witness_tables
// CHECK-NOT: }
sil_witness_table public_external InheritedConformance2: InheritedProtocol1 module witness_tables
// CHECK-LABEL: sil_witness_table public InheritedConformance2: AnyProtocol module witness_tables
// CHECK-NOT: }
sil_witness_table public InheritedConformance2: AnyProtocol module witness_tables


protocol Proto {
	func abc()
}

class DeadMethodClass : Proto {
	func abc()
}

// CHECK-LABEL: sil_witness_table DeadMethodClass: Proto module witness_tables
// CHECK: method #Proto.abc: {{.*}} : nil
// CHECK: }
sil_witness_table DeadMethodClass: Proto module witness_tables {
  method #Proto.abc: nil
}

protocol P {
}

struct ConditionalStruct<T> {
  init()
}

extension ConditionalStruct : P where T : P {
}

// CHECK-LABEL: sil_witness_table hidden <T where T : P> ConditionalStruct<T>: P module witness_tables {
// CHECK-NEXT:    conditional_conformance (T: P): dependent
// CHECK-NEXT:   }
sil_witness_table hidden <T where T : P> ConditionalStruct<T>: P module t4 {
  conditional_conformance (T: P): dependent
}

sil_default_witness_table hidden P {
}