@@ -61,6 +61,21 @@ struct NativeObjectStruct {
61
61
var ele : Builtin.NativeObject
62
62
}
63
63
64
+ struct MyContiguousArrayBody {
65
+ @_hasStorage var count: Builtin.Int64 { get }
66
+ init(count: Builtin.Int64)
67
+ }
68
+
69
+ class MyContiguousArrayStorage {
70
+ @_hasStorage var body: MyContiguousArrayBody { get }
71
+ @objc deinit
72
+ }
73
+
74
+ struct MyContiguousArray {
75
+ @_hasStorage var storage: MyContiguousArrayStorage { get set }
76
+ init(storage: MyContiguousArrayStorage)
77
+ }
78
+
64
79
sil [global_init] @global_init_fun : $@convention(thin) () -> Builtin.RawPointer
65
80
66
81
sil [ossa] @user : $@convention(thin) (@owned Builtin.NativeObject) -> ()
@@ -5123,3 +5138,20 @@ bb0(%0 : @owned $Klass, %1 : @owned $Klass):
5123
5138
return %7 : $()
5124
5139
}
5125
5140
5141
+ // CHECK-LABEL: sil [ossa] @testTransitiveAddressUse : $@convention(thin) (Builtin.Int64, @owned MyContiguousArrayStorage) -> () {
5142
+ // CHECK: [[VAL:%.*]] = struct $MyContiguousArrayBody (%0 : $Builtin.Int64)
5143
+ // CHECK: store [[VAL]] to [trivial] %{{.*}} : $*MyContiguousArrayBody
5144
+ // CHECK-LABEL: } // end sil function 'testTransitiveAddressUse'
5145
+ sil [ossa] @testTransitiveAddressUse : $@convention(thin) (Builtin.Int64, @owned MyContiguousArrayStorage) -> () {
5146
+ bb0(%0 : $Builtin.Int64, %1 : @owned $MyContiguousArrayStorage):
5147
+ %2 = struct $MyContiguousArray (%1 : $MyContiguousArrayStorage)
5148
+ %3 = begin_borrow %2 : $MyContiguousArray
5149
+ %4 = struct_extract %3 : $MyContiguousArray, #MyContiguousArray.storage
5150
+ %5 = ref_element_addr %4 : $MyContiguousArrayStorage, #MyContiguousArrayStorage.body
5151
+ %6 = struct_element_addr %5 : $*MyContiguousArrayBody, #MyContiguousArrayBody.count
5152
+ store %0 to [trivial] %6 : $*Builtin.Int64
5153
+ end_borrow %3 : $MyContiguousArray
5154
+ destroy_value %2 : $MyContiguousArray
5155
+ %10 = tuple ()
5156
+ return %10 : $()
5157
+ }
0 commit comments