@@ -12,16 +12,15 @@ class X {
12
12
func foo()
13
13
}
14
14
15
+ class Y : X {}
16
+
15
17
sil_vtable X {}
18
+ sil_vtable Y {}
16
19
17
20
sil [readnone] @full_apply_site_effects_callee_1 : $@convention(thin) (@owned X) -> ()
18
21
sil [readnone] @full_apply_site_effects_callee_2 : $@convention(thin) (@owned X, @owned X, @owned X) -> ()
19
22
20
23
// CHECK-LABEL: @full_apply_site_effects
21
- // CHECK: Inst #: 8
22
- // CHECK: apply
23
- // CHECK: Mem Behavior: None
24
- // CHECK: Release Behavior: MayRelease
25
24
// CHECK: Inst #: 9
26
25
// CHECK: apply
27
26
// CHECK: Mem Behavior: None
@@ -44,8 +43,17 @@ sil [readnone] @full_apply_site_effects_callee_2 : $@convention(thin) (@owned X,
44
43
// CHECK: Release Behavior: MayRelease
45
44
// CHECK: Inst #: 14
46
45
// CHECK: apply
46
+ // CHECK: Mem Behavior: None
47
+ // CHECK: Release Behavior: MayRelease
48
+ // CHECK: Inst #: 15
49
+ // CHECK: apply
47
50
// CHECK: Mem Behavior: MayHaveSideEffects
48
51
// CHECK: Release Behavior: MayRelease
52
+ // CHECK: Inst #: 16
53
+ // CHECK: Inst #: 17
54
+ // CHECK: apply
55
+ // CHECK: Mem Behavior: None
56
+ // CHECK: Release Behavior: MayRelease
49
57
sil @full_apply_site_effects : $@convention(thin) (@owned X) -> () {
50
58
bb0(%0 : $X):
51
59
%1 = function_ref @full_apply_site_effects_callee_1 : $@convention(thin) (@owned X) -> ()
@@ -56,6 +64,7 @@ bb0(%0 : $X):
56
64
%6 = partial_apply %5(%0) : $@callee_owned @convention(thick) (@owned X, @owned X) -> ()
57
65
%7 = partial_apply %6(%0) : $@callee_owned @convention(thick) (@owned X) -> ()
58
66
%8 = class_method %0 : $X, #X.foo!1 : X -> () -> (), $@convention(method) (@guaranteed X) -> ()
67
+ %9 = convert_function %6 : $@callee_owned @convention(thick) (@owned X) -> () to $@callee_owned @convention(thick) (@owned Y) -> ()
59
68
60
69
apply %1(%0) : $@convention(thin) (@owned X) -> ()
61
70
apply %2() : $@callee_owned @convention(thick) () -> ()
@@ -68,5 +77,8 @@ bb0(%0 : $X):
68
77
// Make sure we properly handle full apply sites for which we can not
69
78
// trivially find an absolute referenced function.
70
79
apply %8(%0) : $@convention(method) (@guaranteed X) -> ()
80
+
81
+ %10 = unchecked_ref_cast %0 : $X to $Y
82
+ apply %9(%10) : $@callee_owned @convention(thick) (@owned Y) -> ()
71
83
return undef : $()
72
84
}
0 commit comments