@@ -18,10 +18,29 @@ public func makeEmptyTuple() {
18
18
return makeTuple ( )
19
19
}
20
20
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 {
23
42
return makeTuple ( t)
24
- }*/
43
+ }
25
44
26
45
// FIXME: Useless pack_element_set/pack_element_get
27
46
0 commit comments