@@ -263,7 +263,7 @@ struct Daleth {
263
263
}
264
264
265
265
class He {
266
-
266
+
267
267
// -- default allocator:
268
268
// CHECK-LABEL: sil hidden [exact_self_class] [ossa] @$s8lifetime2HeC{{[_0-9a-zA-Z]*}}fC : $@convention(method) (@thick He.Type) -> @owned He {
269
269
// CHECK: bb0({{%.*}} : $@thick He.Type):
@@ -292,7 +292,7 @@ struct Waw {
292
292
var b : Val
293
293
294
294
// -- loadable value initializer with tuple destructuring:
295
- // CHECK-LABEL: sil hidden [ossa] @$s8lifetime3WawV{{[_0-9a-zA-Z]*}}fC : $@convention(method) (@owned Ref, Val, Val, @thin Waw.Type) -> @owned Waw
295
+ // CHECK-LABEL: sil hidden [ossa] @$s8lifetime3WawV{{[_0-9a-zA-Z]*}}fC : $@convention(method) (@owned Ref, Val, Val, @thin Waw.Type) -> @owned Waw
296
296
// CHECK: bb0([[A0:%.*]] : @owned $Ref, [[A1:%.*]] : $Val, [[B:%.*]] : $Val, {{%.*}} : $@thin Waw.Type):
297
297
// CHECK-NEXT: [[A:%.*]] = tuple ([[A0]] : {{.*}}, [[A1]] : {{.*}})
298
298
// CHECK-NEXT: [[RET:%.*]] = struct $Waw ([[A]] : {{.*}}, [[B]] : {{.*}})
@@ -513,7 +513,7 @@ class Foo<T> {
513
513
514
514
x = chi. intify ( )
515
515
}
516
-
516
+
517
517
// CHECK-LABEL: sil hidden [ossa] @$s8lifetime3FooCfd : $@convention(method) <T> (@guaranteed Foo<T>) -> @owned Builtin.NativeObject
518
518
519
519
deinit {
@@ -526,13 +526,19 @@ class Foo<T> {
526
526
// CHECK-NOT: ref_element_addr [[THIS]] : {{.*}}, #Foo.x
527
527
// -- destroy_value y
528
528
// CHECK: [[YADDR:%[0-9]+]] = ref_element_addr [[THIS]] : {{.*}}, #Foo.y
529
- // CHECK: destroy_addr [[YADDR]]
529
+ // CHECK: [[YADDR_ACCESS:%.*]] = begin_access [deinit] [static] [[YADDR]]
530
+ // CHECK: destroy_addr [[YADDR_ACCESS]]
531
+ // CHECK: end_access [[YADDR_ACCESS]]
530
532
// -- destroy_value z
531
533
// CHECK: [[ZADDR:%[0-9]+]] = ref_element_addr [[THIS]] : {{.*}}, #Foo.z
532
- // CHECK: destroy_addr [[ZADDR]]
534
+ // CHECK: [[ZADDR_ACCESS:%.*]] = begin_access [deinit] [static] [[ZADDR]]
535
+ // CHECK: destroy_addr [[ZADDR_ACCESS]]
536
+ // CHECK: end_access [[ZADDR_ACCESS]]
533
537
// -- destroy_value w
534
538
// CHECK: [[WADDR:%[0-9]+]] = ref_element_addr [[THIS]] : {{.*}}, #Foo.w
535
- // CHECK: destroy_addr [[WADDR]]
539
+ // CHECK: [[WADDR_ACCESS:%.*]] = begin_access [deinit] [static] [[WADDR]]
540
+ // CHECK: destroy_addr [[WADDR_ACCESS]]
541
+ // CHECK: end_access [[WADDR_ACCESS]]
536
542
// -- return back this
537
543
// CHECK: [[PTR:%.*]] = unchecked_ref_cast [[THIS]] : $Foo<T> to $Builtin.NativeObject
538
544
// CHECK: [[PTR_OWNED:%.*]] = unchecked_ownership_conversion [[PTR]] : $Builtin.NativeObject, @guaranteed to @owned
@@ -567,7 +573,7 @@ class FooSubclass<T> : Foo<T> {
567
573
// CHECK: [[BORROWED_PTR:%.*]] = begin_borrow [[PTR]]
568
574
// CHECK: end_borrow [[BORROWED_PTR]]
569
575
// CHECK: return [[PTR]]
570
-
576
+
571
577
572
578
deinit {
573
579
bar ( )
@@ -586,18 +592,22 @@ class ImplicitDtor {
586
592
// CHECK-NOT: ref_element_addr [[THIS]] : {{.*}}, #ImplicitDtor.x
587
593
// -- destroy_value y
588
594
// CHECK: [[YADDR:%[0-9]+]] = ref_element_addr [[THIS]] : {{.*}}, #ImplicitDtor.y
589
- // CHECK: destroy_addr [[YADDR]]
595
+ // CHECK: [[YADDR_ACCESS:%.*]] = begin_access [deinit] [static] [[YADDR]]
596
+ // CHECK: destroy_addr [[YADDR_ACCESS]]
597
+ // CHECK: end_access [[YADDR_ACCESS]]
590
598
// -- destroy_value w
591
599
// CHECK: [[WADDR:%[0-9]+]] = ref_element_addr [[THIS]] : {{.*}}, #ImplicitDtor.w
592
- // CHECK: destroy_addr [[WADDR]]
600
+ // CHECK: [[WADDR_ACCESS:%.*]] = begin_access [deinit] [static] [[WADDR]]
601
+ // CHECK: destroy_addr [[WADDR_ACCESS]]
602
+ // CHECK: end_access [[WADDR_ACCESS]]
593
603
// CHECK: return
594
604
}
595
605
596
606
class ImplicitDtorDerived < T> : ImplicitDtor {
597
607
var z : T
598
608
599
- init ( z : T ) {
600
- super. init ( )
609
+ init ( z : T ) {
610
+ super. init ( )
601
611
self . z = z
602
612
}
603
613
@@ -611,7 +621,9 @@ class ImplicitDtorDerived<T> : ImplicitDtor {
611
621
// CHECK: [[BORROWED_PTR:%.*]] = begin_borrow [[PTR]]
612
622
// CHECK: [[CAST_BORROWED_PTR:%.*]] = unchecked_ref_cast [[BORROWED_PTR]] : $Builtin.NativeObject to $ImplicitDtorDerived<T>
613
623
// CHECK: [[ZADDR:%[0-9]+]] = ref_element_addr [[CAST_BORROWED_PTR]] : {{.*}}, #ImplicitDtorDerived.z
614
- // CHECK: destroy_addr [[ZADDR]]
624
+ // CHECK: [[ZADDR_ACCESS:%.*]] = begin_access [deinit] [static] [[ZADDR]]
625
+ // CHECK: destroy_addr [[ZADDR_ACCESS]]
626
+ // CHECK: end_access [[ZADDR_ACCESS]]
615
627
// CHECK: end_borrow [[BORROWED_PTR]]
616
628
// -- epilog
617
629
// CHECK-NOT: unchecked_ref_cast
0 commit comments