@@ -75,6 +75,17 @@ final class NewHalfOpenRangeGenerator : NewRangeGenerator1 {
75
75
override init(start: NonTrivialStruct, end: NonTrivialStruct)
76
76
}
77
77
78
+ struct ArrayIntBuffer {
79
+ var storage : Builtin.NativeObject
80
+ }
81
+
82
+ struct MyArray<T> {
83
+ var buffer : ArrayIntBuffer
84
+ }
85
+
86
+ struct MyStruct {
87
+ }
88
+
78
89
sil_global @total_klass : $Klass
79
90
sil_global @total_nontrivialstruct : $NonTrivialStruct
80
91
@@ -85,6 +96,7 @@ sil @use_a : $@convention(thin) (@owned A) -> ()
85
96
sil @use_twofield : $@convention(thin) (@owned TwoField) -> ()
86
97
sil @init_twofield : $@convention(thin) (@thin TwoField.Type) -> @owned TwoField
87
98
sil @get_nontrivialstruct : $@convention(thin) () -> @owned NonTrivialStruct
99
+ sil [ossa] @get_array : $@convention(thin) () -> @owned MyArray<MyStruct>
88
100
89
101
// We have a bug in the old projection code which this test case exposes.
90
102
// Make sure its handled properly in the new projection.
@@ -1250,3 +1262,18 @@ bb14:
1250
1262
return %26 : $()
1251
1263
}
1252
1264
1265
+ // CHECK-LABEL: @test_is_unique :
1266
+ // CHECK: load
1267
+ // CHECK: } // end sil function 'test_is_unique'
1268
+ sil [ossa] @test_is_unique : $@convention(thin) (@in MyArray<MyStruct>) -> () {
1269
+ bb0(%0 : $*MyArray<MyStruct>):
1270
+ %1 = function_ref @get_array : $@convention(thin) () -> @owned MyArray<MyStruct>
1271
+ %2 = apply %1() : $@convention(thin) () -> @owned MyArray<MyStruct>
1272
+ store %2 to [assign] %0 : $*MyArray<MyStruct>
1273
+ %4 = struct_element_addr %0 : $*MyArray<MyStruct>, #MyArray.buffer
1274
+ %5 = is_unique %4 : $*ArrayIntBuffer
1275
+ %7 = load [take] %0 : $*MyArray<MyStruct>
1276
+ destroy_value %7 : $MyArray<MyStruct>
1277
+ %t = tuple ()
1278
+ return %t : $()
1279
+ }
0 commit comments