@@ -11,6 +11,8 @@ class Klass {
1111}
1212class SubKlass : Klass {}
1313
14+ class C {}
15+
1416enum FakeOptional<T> {
1517case none
1618case some(T)
@@ -32,14 +34,15 @@ protocol P : AnyObject {}
3234
3335sil @unreachableHandler : $@convention(thin) () -> ()
3436
35- // CHECK-LABEL: sil [ossa] @testCompleteOSSALifetimes : $@convention(thin) (@owned FakeOptional<Klass>) -> () {
37+ // CHECK-LABEL: sil [ossa] @testCompleteOSSALifetimes : {{.*}} {
3638// CHECK: [[BOX:%.*]] = alloc_box ${ var FakeOptional<Klass> }, var, name "c"
3739// CHECK: [[BORROW:%.,*]] = begin_borrow [lexical] [[BOX]] : ${ var FakeOptional<Klass> }
3840// CHECK: bb2:
3941// CHECK: apply
4042// CHECK: end_borrow [[BORROW]] : ${ var FakeOptional<Klass> }
4143// CHECK: dealloc_box [dead_end] [[BOX]] : ${ var FakeOptional<Klass> }
4244// CHECK: unreachable
45+ // CHECK-LABEL: } // end sil function 'testCompleteOSSALifetimes'
4346sil [ossa] @testCompleteOSSALifetimes : $@convention(thin) (@owned FakeOptional<Klass>) -> () {
4447bb0(%0 : @owned $FakeOptional<Klass>):
4548 %box = alloc_box ${ var FakeOptional<Klass> }, var, name "c"
7376 return %36 : $()
7477}
7578
76- // CHECK-LABEL: sil [ossa] @testExistentialLifetime : $@convention(thin) (@owned any P) -> @owned AnyObject {
79+ // CHECK-LABEL: sil [ossa] @testExistentialLifetime : {{.*}} {
7780// CHECK-NOT: destroy
81+ // CHECK-LABEL: } // end sil function 'testExistentialLifetime'
7882sil [ossa] @testExistentialLifetime : $@convention(thin) (@owned any P) -> @owned AnyObject {
7983bb0(%0 : @owned $any P):
8084 %1 = open_existential_ref %0 : $any P to $@opened("34B79428-2E49-11ED-901A-8AC134504E1C", any P) Self
8185 %2 = init_existential_ref %1 : $@opened("34B79428-2E49-11ED-901A-8AC134504E1C", any P) Self : $@opened("34B79428-2E49-11ED-901A-8AC134504E1C", any P) Self, $AnyObject
8286 return %2 : $AnyObject
8387}
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