@@ -499,3 +499,59 @@ func duplicate_with_int4<Value>(condition: Bool, value: Value) -> (Int, Int, Int
499
499
}
500
500
}
501
501
502
+ // Verify tuple rebuilding.
503
+ // CHECK-LABEL: sil private [ossa] @$s20opaque_values_silgen10duplicate15valuex_xtx_tlFx_xtyXEfU_ : {{.*}} {
504
+ // CHECK: [[RETVAL:%[^,]+]] = tuple ({{%[^,]+}} : $Value, {{%[^,]+}} : $Value)
505
+ // CHECK: return [[RETVAL]] : $(Value, Value)
506
+ // CHECK-LABEL: } // end sil function '$s20opaque_values_silgen10duplicate15valuex_xtx_tlFx_xtyXEfU_'
507
+ @_silgen_name ( " duplicate1 " )
508
+ func duplicate1< Value> ( value: Value ) -> ( Value , Value ) {
509
+ doit {
510
+ ( value, value)
511
+ }
512
+ }
513
+ // CHECK-LABEL: sil private [ossa] @$s20opaque_values_silgen10duplicate25valuex3one_x3twotx_tlFxAD_xAEtyXEfU_ : {{.*}} {
514
+ // CHECK: [[RETVAL:%[^,]+]] = tuple $(one: Value, two: Value) ({{%[^,]+}}, {{%[^,]+}})
515
+ // CHECK: return [[RETVAL]] : $(one: Value, two: Value)
516
+ // CHECK-LABEL: } // end sil function '$s20opaque_values_silgen10duplicate25valuex3one_x3twotx_tlFxAD_xAEtyXEfU_'
517
+ @_silgen_name ( " duplicate2 " )
518
+ func duplicate2< Value> ( value: Value ) -> ( one: Value , two: Value ) {
519
+ doit {
520
+ ( one: value, two: value)
521
+ }
522
+ }
523
+ // CHECK-LABEL: sil private [ossa] @$s20opaque_values_silgen19duplicate_with_int15valuex_xSitx_tlFx_xSityXEfU_ : {{.*}} {
524
+ // CHECK: [[RETVAL:%[^,]+]] = tuple ({{%[^,]+}} : $Value, {{%[^,]+}} : $Value, {{%[^,]+}} : $Int)
525
+ // CHECK: return [[RETVAL]]
526
+ // CHECK-LABEL: } // end sil function '$s20opaque_values_silgen19duplicate_with_int15valuex_xSitx_tlFx_xSityXEfU_'
527
+ @_silgen_name ( " duplicate_with_int1 " )
528
+ func duplicate_with_int1< Value> ( value: Value ) -> ( Value , Value , Int ) {
529
+ doit {
530
+ ( value, value, 42 )
531
+ }
532
+ }
533
+
534
+ // CHECK-LABEL: sil private [ossa] @$s20opaque_values_silgen19duplicate_with_int25valuex_xt_Sitx_tlFx_xt_SityXEfU_ : {{.*}} {
535
+ // CHECK: [[INNER:%[^,]+]] = tuple ({{%[^,]+}} : $Value, {{%[^,]+}} : $Value)
536
+ // CHECK: [[RETVAL:%[^,]+]] = tuple ([[INNER]] : $(Value, Value), {{%[^,]+}} : $Int)
537
+ // CHECK: return [[RETVAL]]
538
+ // CHECK-LABEL: } // end sil function '$s20opaque_values_silgen19duplicate_with_int25valuex_xt_Sitx_tlFx_xt_SityXEfU_'
539
+ @_silgen_name ( " duplicate_with_int2 " )
540
+ func duplicate_with_int2< Value> ( value: Value ) -> ( ( Value , Value ) , Int ) {
541
+ doit {
542
+ ( ( value, value) , 42 )
543
+ }
544
+ }
545
+ // CHECK-LABEL: sil private [ossa] @$s20opaque_values_silgen19duplicate_with_int35valueSi_x_x_x_SitxttSitx_tlFSi_x_x_x_SitxttSityXEfU_ : {{.*}} {
546
+ // CHECK: [[INNERMOST:%[^,]+]] = tuple ({{%[^,]+}} : $Value, {{%[^,]+}} : $Int)
547
+ // CHECK: [[INNERMIDDLE:%[^,]+]] = tuple ({{%[^,]+}} : $Value, [[INNERMOST]] : $(Value, Int), {{%[^,]+}} : $Value)
548
+ // CHECK: [[INNERLEAST:%[^,]+]] = tuple ({{%[^,]+}} : $Value, [[INNERMIDDLE]] : $(Value, (Value, Int), Value))
549
+ // CHECK: [[RETVAL:%[^,]+]] = tuple ({{%[^,]+}} : $Int, [[INNERLEAST]] : $(Value, (Value, (Value, Int), Value)), {{%[^,]+}} : $Int)
550
+ // CHECK: return [[RETVAL]] : $(Int, (Value, (Value, (Value, Int), Value)), Int)
551
+ // CHECK-LABEL: } // end sil function '$s20opaque_values_silgen19duplicate_with_int35valueSi_x_x_x_SitxttSitx_tlFSi_x_x_x_SitxttSityXEfU_'
552
+ @_silgen_name ( " duplicate_with_int3 " )
553
+ func duplicate_with_int3< Value> ( value: Value ) -> ( Int , ( Value , ( Value , ( Value , Int ) , Value ) ) , Int ) {
554
+ doit {
555
+ ( 42 , ( value, ( value, ( value, 43 ) , value) ) , 44 )
556
+ }
557
+ }
0 commit comments