@@ -133,6 +133,44 @@ bb0:
133
133
return %5 : $X
134
134
}
135
135
136
+ sil @return_x : $@convention(thin) (@guaranteed X) -> @owned X
137
+
138
+ // CHECK-LABEL: Address escape information for test_class_argument:
139
+ // CHECK: pair 0 - 1
140
+ // CHECK-NEXT: %0 = alloc_ref $X
141
+ // CHECK-NEXT: %3 = ref_element_addr %2 : $X, #X.s
142
+ // CHECK-NEXT: may alias
143
+ // CHECK: End function test_class_argument
144
+ sil @test_class_argument : $@convention(thin) () -> () {
145
+ bb0:
146
+ %0 = alloc_ref $X
147
+ %1 = function_ref @return_x : $@convention(thin) (@guaranteed X) -> @owned X
148
+ %2 = apply %1(%0) : $@convention(thin) (@guaranteed X) -> @owned X
149
+ %3 = ref_element_addr %2 : $X, #X.s
150
+ fix_lifetime %0 : $X
151
+ fix_lifetime %3 : $*Str
152
+ %12 = tuple ()
153
+ return %12 : $()
154
+ }
155
+
156
+ // CHECK-LABEL: Address escape information for test_reachable_no_alias:
157
+ // CHECK: pair 0 - 1
158
+ // CHECK-NEXT: %3 = ref_element_addr %2 : $X, #X.s
159
+ // CHECK-NEXT: %0 = alloc_ref $XandIntClass
160
+ // CHECK-NEXT: address reachable but no alias
161
+ // CHECK: End function test_reachable_no_alias
162
+ sil @test_reachable_no_alias : $@convention(thin) () -> () {
163
+ bb0:
164
+ %0 = alloc_ref $XandIntClass
165
+ %1 = ref_element_addr %0 : $XandIntClass, #XandIntClass.x
166
+ %2 = load %1 : $*X
167
+ %3 = ref_element_addr %2 : $X, #X.s
168
+ fix_lifetime %3 : $*Str
169
+ fix_lifetime %0 : $XandIntClass
170
+ %12 = tuple ()
171
+ return %12 : $()
172
+ }
173
+
136
174
// CHECK-LABEL: Address escape information for test_struct_with_class:
137
175
// CHECK: value: %1 = struct $Container (%0 : $X)
138
176
// CHECK-NEXT: ==> %7 = apply %6(%1) : $@convention(thin) (@guaranteed Container) -> ()
0 commit comments