@@ -15,11 +15,16 @@ struct S {
15
15
let c : C
16
16
}
17
17
18
+ struct Trivial {
19
+ let i : Int
20
+ }
21
+
18
22
enum E {
19
23
case e( C )
20
24
}
21
25
22
- func use< T> ( _ t: T ) { }
26
+ @_silgen_name ( " use_generic " )
27
+ func use_generic< T> ( _ t: T ) { }
23
28
24
29
////////////////////////////////////////////////////////////////////////////////
25
30
// Declarations }}
@@ -54,7 +59,7 @@ func lexical_borrow_let_class() {
54
59
@_silgen_name ( " lexical_borrow_if_let_class " )
55
60
func lexical_borrow_if_let_class( ) {
56
61
if let c = C ( failably: ( ) ) {
57
- use ( ( ) )
62
+ use_generic ( ( ) )
58
63
}
59
64
}
60
65
@@ -79,6 +84,42 @@ func lexical_borrow_let_class_in_enum() {
79
84
let s = E . e ( C ( ) )
80
85
}
81
86
87
+ // arguments:
88
+
89
+ // CHECK-LABEL: sil hidden [ossa] @lexical_borrow_arg_guaranteed_class : $@convention(thin) (@guaranteed C) -> () {
90
+ // CHECK: {{bb[^,]+}}([[INSTANCE:%[^,]+]] : @guaranteed $C):
91
+ // CHECK: [[LIFETIME:%[^,]+]] = begin_borrow [lexical] [[INSTANCE]]
92
+ // CHECK: debug_value [[LIFETIME]]
93
+ // CHECK: [[ADDR:%[^,]+]] = alloc_stack $C
94
+ // CHECK: store_borrow [[LIFETIME]] to [[ADDR]]
95
+ // CHECK: [[USE_GENERIC:%[^,]+]] = function_ref @use_generic
96
+ // CHECK: [[REGISTER_6:%[^,]+]] = apply [[USE_GENERIC]]<C>([[ADDR]])
97
+ // CHECK: dealloc_stack [[ADDR]]
98
+ // CHECK: end_borrow [[LIFETIME]]
99
+ // CHECK: [[RETVAL:%[^,]+]] = tuple ()
100
+ // CHECK: return [[RETVAL]]
101
+ // CHECK-LABEL: } // end sil function 'lexical_borrow_arg_guaranteed_class'
102
+ @_silgen_name ( " lexical_borrow_arg_guaranteed_class " )
103
+ func lexical_borrow_arg_guaranteed_class( _ c: C ) {
104
+ use_generic ( c)
105
+ }
106
+
107
+ // CHECK-LABEL: sil hidden [ossa] @lexical_borrow_arg_class_addr : $@convention(thin) (@inout C) -> () {
108
+ // CHECK-NOT: begin_borrow [lexical]
109
+ // CHECK-LABEL: } // end sil function 'lexical_borrow_arg_class_addr'
110
+ @_silgen_name ( " lexical_borrow_arg_class_addr " )
111
+ func lexical_borrow_arg_class_addr( _ c: inout C ) {
112
+ use_generic ( c)
113
+ }
114
+
115
+ // CHECK-LABEL: sil hidden [ossa] @lexical_borrow_arg_trivial : $@convention(thin) (Trivial) -> () {
116
+ // CHECK-NOT: begin_borrow [lexical]
117
+ // CHECK-LABEL: } // end sil function 'lexical_borrow_arg_trivial'
118
+ @_silgen_name ( " lexical_borrow_arg_trivial " )
119
+ func lexical_borrow_arg_trivial( _ trivial: Trivial ) {
120
+ use_generic ( trivial)
121
+ }
122
+
82
123
////////////////////////////////////////////////////////////////////////////////
83
124
// Test }}
84
125
////////////////////////////////////////////////////////////////////////////////
0 commit comments