@@ -18,10 +18,29 @@ public func makeEmptyTuple() {
1818 return makeTuple ( )
1919}
2020
21- // FIXME: This crashes in SILGen
22- /*public func makeOne<T>(_ t: T) -> T {
21+ // FIXME: Useless pack_element_set/pack_element_get
22+
23+ // CHECK-LABEL: sil @$s17tuples_from_packs7makeOneyxxlF : $@convention(thin) <T> (@in_guaranteed T) -> @out T {
24+ // CHECK: bb0(%0 : $*T, %1 : $*T):
25+ // CHECK: [[PACK:%.*]] = alloc_pack $Pack{T}
26+ // CHECK-NEXT: [[IDX:%.*]] = scalar_pack_index 0 of $Pack{T}
27+ // CHECK-NEXT: pack_element_set %0 : $*T into [[IDX]] of [[PACK]] : $*Pack{T}
28+ // CHECK-NEXT: [[PACK2:%.*]] = alloc_pack $Pack{T}
29+ // CHECK-NEXT: [[BOX:%.*]] = alloc_stack $T
30+ // CHECK-NEXT: copy_addr %1 to [init] [[BOX]] : $*T
31+ // CHECK-NEXT: pack_element_set [[BOX]] : $*T into [[IDX]] of [[PACK2]] : $*Pack{T}
32+ // CHECK-NEXT: [[ELT:%.*]] = pack_element_get [[IDX]] of [[PACK]] : $*Pack{T} as $*T
33+ // CHECK-NEXT: [[ELT2:%.*]] = pack_element_get [[IDX]] of [[PACK2]] : $*Pack{T} as $*T
34+ // CHECK-NEXT: copy_addr [[ELT2]] to [init] [[ELT]] : $*T
35+ // CHECK-NEXT: destroy_addr [[BOX]] : $*T
36+ // CHECK-NEXT: dealloc_stack [[BOX]] : $*T
37+ // CHECK-NEXT: dealloc_pack [[PACK2]] : $*Pack{T}
38+ // CHECK-NEXT: dealloc_pack [[PACK]] : $*Pack{T}
39+ // CHECK-NEXT: [[RET:%.*]] = tuple ()
40+ // CHECK-NEXT: return [[RET]] : $()
41+ public func makeOne< T> ( _ t: T ) -> T {
2342 return makeTuple ( t)
24- }*/
43+ }
2544
2645// FIXME: Useless pack_element_set/pack_element_get
2746
0 commit comments