@@ -6,6 +6,11 @@ import Builtin
6
6
7
7
class C {}
8
8
9
+ public enum FakeOptional<T> {
10
+ case none
11
+ case some(T)
12
+ }
13
+
9
14
// CHECK-LABEL: begin running test 1 of 1 on eagerConsumneOwnedArg: ossa-lifetime-completion with: @argument
10
15
// CHECK-LABEL: OSSA lifetime completion: %0 = argument of bb0 : $C
11
16
// CHECK: sil [ossa] @eagerConsumneOwnedArg : $@convention(thin) (@owned C) -> () {
45
50
%r = tuple ()
46
51
return %r : $()
47
52
}
53
+
54
+ // CHECK-LABEL: sil [ossa] @borrowTest : $@convention(method) (@owned C) -> () {
55
+ // CHECK: bb1:
56
+ // CHECK-NEXT: end_borrow
57
+ // CHECK-NEXT: br bb3
58
+ // CHECK-LABEL: } // end sil function 'borrowTest'
59
+ sil [ossa] @borrowTest : $@convention(method) (@owned C) -> () {
60
+ bb0(%0 : @owned $C):
61
+ test_specification "ossa-lifetime-completion @instruction[0]"
62
+ %borrow = begin_borrow %0 : $C
63
+ cond_br undef, bb1, bb2
64
+
65
+ bb1:
66
+ end_borrow %borrow : $C
67
+ br bb3
68
+
69
+ bb2:
70
+ end_borrow %borrow : $C
71
+ br bb3
72
+
73
+ bb3:
74
+ destroy_value %0 : $C
75
+ %r = tuple ()
76
+ return %r : $()
77
+ }
78
+
79
+ // CHECK-LABEL: sil [ossa] @enumTest : $@convention(method) (@guaranteed FakeOptional<C>) -> () {
80
+ // CHECK: bb2
81
+ // CHECK: destroy_value
82
+ // CHECK: br bb3
83
+ // CHECK-LABEL: } // end sil function 'enumTest'
84
+ sil [ossa] @enumTest : $@convention(method) (@guaranteed FakeOptional<C>) -> () {
85
+ bb0(%0 : @guaranteed $FakeOptional<C>):
86
+ test_specification "ossa-lifetime-completion @instruction[0]"
87
+ %copy = copy_value %0 : $FakeOptional<C>
88
+ %borrow = begin_borrow %copy : $FakeOptional<C>
89
+ switch_enum %borrow : $FakeOptional<C>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
90
+
91
+ bb1(%some : @guaranteed $C):
92
+ end_borrow %borrow : $FakeOptional<C>
93
+ destroy_value %copy : $FakeOptional<C>
94
+ br bb3
95
+
96
+ bb2:
97
+ end_borrow %borrow : $FakeOptional<C>
98
+ br bb3
99
+
100
+ bb3:
101
+ %r = tuple ()
102
+ return %r : $()
103
+ }
104
+
0 commit comments