@@ -11,6 +11,8 @@ class Klass {
11
11
}
12
12
class SubKlass : Klass {}
13
13
14
+ class C {}
15
+
14
16
enum FakeOptional<T> {
15
17
case none
16
18
case some(T)
@@ -32,14 +34,15 @@ protocol P : AnyObject {}
32
34
33
35
sil @unreachableHandler : $@convention(thin) () -> ()
34
36
35
- // CHECK-LABEL: sil [ossa] @testCompleteOSSALifetimes : $@convention(thin) (@owned FakeOptional<Klass>) -> () {
37
+ // CHECK-LABEL: sil [ossa] @testCompleteOSSALifetimes : {{.*}} {
36
38
// CHECK: [[BOX:%.*]] = alloc_box ${ var FakeOptional<Klass> }, var, name "c"
37
39
// CHECK: [[BORROW:%.,*]] = begin_borrow [lexical] [[BOX]] : ${ var FakeOptional<Klass> }
38
40
// CHECK: bb2:
39
41
// CHECK: apply
40
42
// CHECK: end_borrow [[BORROW]] : ${ var FakeOptional<Klass> }
41
43
// CHECK: dealloc_box [dead_end] [[BOX]] : ${ var FakeOptional<Klass> }
42
44
// CHECK: unreachable
45
+ // CHECK-LABEL: } // end sil function 'testCompleteOSSALifetimes'
43
46
sil [ossa] @testCompleteOSSALifetimes : $@convention(thin) (@owned FakeOptional<Klass>) -> () {
44
47
bb0(%0 : @owned $FakeOptional<Klass>):
45
48
%box = alloc_box ${ var FakeOptional<Klass> }, var, name "c"
73
76
return %36 : $()
74
77
}
75
78
76
- // CHECK-LABEL: sil [ossa] @testExistentialLifetime : $@convention(thin) (@owned any P) -> @owned AnyObject {
79
+ // CHECK-LABEL: sil [ossa] @testExistentialLifetime : {{.*}} {
77
80
// CHECK-NOT: destroy
81
+ // CHECK-LABEL: } // end sil function 'testExistentialLifetime'
78
82
sil [ossa] @testExistentialLifetime : $@convention(thin) (@owned any P) -> @owned AnyObject {
79
83
bb0(%0 : @owned $any P):
80
84
%1 = open_existential_ref %0 : $any P to $@opened("34B79428-2E49-11ED-901A-8AC134504E1C", any P) Self
81
85
%2 = init_existential_ref %1 : $@opened("34B79428-2E49-11ED-901A-8AC134504E1C", any P) Self : $@opened("34B79428-2E49-11ED-901A-8AC134504E1C", any P) Self, $AnyObject
82
86
return %2 : $AnyObject
83
87
}
88
+
89
+ // CHECK-LABEL: sil [ossa] @store_borrow : {{.*}} {
90
+ // CHECK: bb0([[INSTANCE:%[^,]+]] :
91
+ // CHECK: [[ADDR:%[^,]+]] = alloc_stack $C
92
+ // CHECK: [[TOKEN:%[^,]+]] = store_borrow [[INSTANCE]] to [[ADDR]]
93
+ // CHECK: [[LOAD:%[^,]+]] = load_borrow [[TOKEN]]
94
+ // CHECK: cond_br undef, {{bb[0-9]+}}, [[DIE:bb[0-9]+]]
95
+ // CHECK: [[DIE]]:
96
+ // CHECK: end_borrow [[LOAD]]
97
+ // CHECK: end_borrow [[TOKEN]]
98
+ // CHECK: destroy_value [dead_end] [[INSTANCE]]
99
+ // CHECK: unreachable
100
+ // CHECK-LABEL: } // end sil function 'store_borrow'
101
+ sil [ossa] @store_borrow : $@convention(thin) (@owned C) -> () {
102
+ entry(%instance : @owned $C):
103
+ %addr = alloc_stack $C
104
+ %token = store_borrow %instance to %addr : $*C
105
+ %load = load_borrow %token : $*C
106
+ cond_br undef, exit, die
107
+ exit:
108
+ end_borrow %load : $C
109
+ end_borrow %token : $*C
110
+ dealloc_stack %addr : $*C
111
+ apply undef(%instance) : $@convention(thin) (@guaranteed C) -> ()
112
+ destroy_value %instance : $C
113
+ %retval = tuple ()
114
+ return %retval : $()
115
+ die:
116
+ unreachable
117
+ }
118
+
119
+ // CHECK-LABEL: sil [ossa] @begin_access : {{.*}} {
120
+ // CHECK: [[ADDR:%[^,]+]] = alloc_stack $C
121
+ // CHECK: [[ACCESS:%[^,]+]] = begin_access [modify] [static] [[ADDR]]
122
+ // CHECK: cond_br undef, {{bb[0-9]+}}, [[DIE:bb[0-9]+]]
123
+ // CHECK: [[DIE]]:
124
+ // CHECK: end_access [[ACCESS]]
125
+ // CHECK: unreachable
126
+ // CHECK-LABEL: } // end sil function 'begin_access'
127
+ sil [ossa] @begin_access : $@convention(thin) () -> () {
128
+ entry:
129
+ %addr2 = alloc_stack $C
130
+ %access = begin_access [static] [modify] %addr2 : $*C
131
+ apply undef(%access) : $@convention(thin) () -> (@out C)
132
+ destroy_addr %access : $*C
133
+ cond_br undef, exit, die
134
+
135
+ exit:
136
+ end_access %access : $*C
137
+ dealloc_stack %addr2 : $*C
138
+ %retval = tuple ()
139
+ return %retval : $()
140
+
141
+ die:
142
+ unreachable
143
+ }
0 commit comments