1
1
// RUN: %target-swift-emit-silgen -swift-version 5 %s | %FileCheck %s
2
2
// RUN: %target-swift-emit-silgen -swift-version 5 %s -enable-implicit-dynamic | %FileCheck %s --check-prefix=IMPLICIT
3
+ // RUN: %target-swift-emit-silgen -swift-version 5 %s -disable-previous-implementation-calls-in-dynamic-replacements | %FileCheck %s --check-prefix=NOPREVIOUS
3
4
4
5
// CHECK-LABEL: sil hidden [ossa] @$s23dynamically_replaceable014maybe_dynamic_B0yyF : $@convention(thin) () -> () {
5
6
// IMPLICIT-LABEL: sil hidden [dynamically_replacable] [ossa] @$s23dynamically_replaceable014maybe_dynamic_B0yyF : $@convention(thin) () -> () {
@@ -122,6 +123,12 @@ extension Klass {
122
123
// CHECK: [[METHOD:%.*]] = class_method %0 : $Klass, #Klass.dynamic_replaceable2!1
123
124
// CHECK: = apply [[METHOD]](%0) : $@convention(method) (@guaranteed Klass) -> ()
124
125
// CHECK: return
126
+ // NOPREVIOUS-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable5KlassC08dynamic_B0yyF"] [ossa] @$s23dynamically_replaceable5KlassC11replacementyyF : $@convention(method) (@guaranteed Klass) -> () {
127
+ // NOPREVIOUS: [[FN:%.*]] = class_method %0 : $Klass, #Klass.dynamic_replaceable
128
+ // NOPREVIOUS: apply [[FN]](%0) : $@convention(method) (@guaranteed Klass) -> ()
129
+ // NOPREVIOUS: [[METHOD:%.*]] = class_method %0 : $Klass, #Klass.dynamic_replaceable2!1
130
+ // NOPREVIOUS: = apply [[METHOD]](%0) : $@convention(method) (@guaranteed Klass) -> ()
131
+ // NOPREVIOUS: return
125
132
@_dynamicReplacement ( for: dynamic_replaceable ( ) )
126
133
func replacement( ) {
127
134
dynamic_replaceable ( )
@@ -131,6 +138,9 @@ extension Klass {
131
138
// CHECK-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable5KlassC1cACSi_tcfC"] [ossa] @$s23dynamically_replaceable5KlassC2crACSi_tcfC : $@convention(method) (Int, @thick Klass.Type) -> @owned Klass {
132
139
// CHECK: [[FUN:%.*]] = prev_dynamic_function_ref @$s23dynamically_replaceable5KlassC2crACSi_tcfC
133
140
// CHECK: apply [[FUN]]({{.*}}, %1)
141
+ // NOPREVIOUS-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable5KlassC1cACSi_tcfC"] [ossa] @$s23dynamically_replaceable5KlassC2crACSi_tcfC : $@convention(method) (Int, @thick Klass.Type) -> @owned Klass {
142
+ // NOPREVIOUS: [[FUN:%.*]] = dynamic_function_ref @$s23dynamically_replaceable5KlassC1cACSi_tcfC
143
+ // NOPREVIOUS: apply [[FUN]]({{.*}}, %1)
134
144
@_dynamicReplacement ( for: init ( c: ) )
135
145
convenience init ( cr: Int ) {
136
146
self . init ( c: cr + 1 )
@@ -140,7 +150,11 @@ extension Klass {
140
150
// CHECK: // dynamic_function_ref Klass.__allocating_init(c:)
141
151
// CHECK: [[FUN:%.*]] = dynamic_function_ref @$s23dynamically_replaceable5KlassC1cACSi_tcfC
142
152
// CHECK: apply [[FUN]]({{.*}}, %2)
143
- @_dynamicReplacement ( for: init ( a: b: ) )
153
+ // NOPREVIOUS-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable5KlassC1a1bACSi_SitcfC"] [ossa] @$s23dynamically_replaceable5KlassC2ar2brACSi_SitcfC
154
+ // NOPREVIOUS: // dynamic_function_ref Klass.__allocating_init(c:)
155
+ // NOPREVIOUS: [[FUN:%.*]] = dynamic_function_ref @$s23dynamically_replaceable5KlassC1cACSi_tcfC
156
+ // NOPREVIOUS: apply [[FUN]]({{.*}}, %2)
157
+ @_dynamicReplacement ( for: init ( a: b: ) )
144
158
convenience init ( ar: Int , br: Int ) {
145
159
self . init ( c: ar + br)
146
160
}
@@ -153,11 +167,19 @@ extension Klass {
153
167
// CHECK: bb0([[ARG:%.*]] : @guaranteed $Klass):
154
168
// CHECK: [[ORIG:%.*]] = prev_dynamic_function_ref @$s23dynamically_replaceable5KlassC1rSivg
155
169
// CHECK: apply [[ORIG]]([[ARG]]) : $@convention(method) (@guaranteed Klass) -> Int
170
+ // NOPREVIOUS-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable5KlassC08dynamic_B4_varSivg"] [ossa] @$s23dynamically_replaceable5KlassC1rSivg : $@convention(method) (@guaranteed Klass) -> Int {
171
+ // NOPREVIOUS: bb0([[ARG:%.*]] : @guaranteed $Klass):
172
+ // NOPREVIOUS: [[ORIG:%.*]] = class_method [[ARG]] : $Klass, #Klass.dynamic_replaceable_var!getter.1
173
+ // NOPREVIOUS: apply [[ORIG]]([[ARG]]) : $@convention(method) (@guaranteed Klass) -> Int
156
174
157
175
// CHECK-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable5KlassC08dynamic_B4_varSivs"] [ossa] @$s23dynamically_replaceable5KlassC1rSivs : $@convention(method) (Int, @guaranteed Klass) -> () {
158
176
// CHECK: bb0({{.*}} : $Int, [[SELF:%.*]] : @guaranteed $Klass):
159
177
// CHECK: [[ORIG:%.*]] = prev_dynamic_function_ref @$s23dynamically_replaceable5KlassC1rSivs
160
178
// CHECK: apply [[ORIG]]({{.*}}, [[SELF]]) : $@convention(method)
179
+ // NOPREVIOUS-LABEL: sil hidden [dynamic_replacement_for "$s23dynamically_replaceable5KlassC08dynamic_B4_varSivs"] [ossa] @$s23dynamically_replaceable5KlassC1rSivs : $@convention(method) (Int, @guaranteed Klass) -> () {
180
+ // NOPREVIOUS: bb0({{.*}} : $Int, [[SELF:%.*]] : @guaranteed $Klass):
181
+ // NOPREVIOUS: [[ORIG:%.*]] = class_method [[SELF]] : $Klass, #Klass.dynamic_replaceable_var!setter
182
+ // NOPREVIOUS: apply [[ORIG]]({{.*}}, [[SELF]]) : $@convention(method)
161
183
@_dynamicReplacement ( for: dynamic_replaceable_var)
162
184
var r : Int {
163
185
get {
0 commit comments