@@ -529,14 +529,15 @@ func test_multiple_patterns1() {
529
529
// CHECK: cond_br {{%.*}}, [[FIRST_MATCH_CASE:bb[0-9]+]], [[FIRST_FAIL:bb[0-9]+]]
530
530
// CHECK: [[FIRST_MATCH_CASE]]:
531
531
// CHECK: debug_value [[FIRST_X:%.*]] :
532
- // CHECK: [[B1_FUNC:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
533
- // CHECK: apply [[B1_FUNC]]([[FIRST_X]])
532
+ // CHECK: br [[CASE_BODY:bb[0-9]+]]([[FIRST_X]] : $Int)
534
533
// CHECK: [[FIRST_FAIL]]:
535
534
// CHECK: cond_br {{%.*}}, [[SECOND_MATCH_CASE:bb[0-9]+]], [[SECOND_FAIL:bb[0-9]+]]
536
535
// CHECK: [[SECOND_MATCH_CASE]]:
537
536
// CHECK: debug_value [[SECOND_X:%.*]] :
538
- // CHECK: [[B2_FUNC:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
539
- // CHECK: apply [[B2_FUNC]]([[SECOND_X]])
537
+ // CHECK: br [[CASE_BODY]]([[SECOND_X]] : $Int)
538
+ // CHECK: [[CASE_BODY]]([[BODY_VAR:%.*]] : $Int):
539
+ // CHECK: [[A:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
540
+ // CHECK: apply [[A]]([[BODY_VAR]])
540
541
a ( x: x)
541
542
default :
542
543
// CHECK: [[SECOND_FAIL]]:
@@ -559,15 +560,16 @@ func test_multiple_patterns2() {
559
560
// CHECK: apply {{%.*}}([[FIRST_X]], [[T1]])
560
561
// CHECK: cond_br {{%.*}}, [[FIRST_MATCH_CASE:bb[0-9]+]], [[FIRST_FAIL:bb[0-9]+]]
561
562
// CHECK: [[FIRST_MATCH_CASE]]:
562
- // CHECK: [[A:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
563
- // CHECK: apply [[A]]([[FIRST_X]])
563
+ // CHECK: br [[CASE_BODY:bb[0-9]+]]([[FIRST_X]] : $Int)
564
564
// CHECK: [[FIRST_FAIL]]:
565
565
// CHECK: debug_value [[SECOND_X:%.*]] :
566
566
// CHECK: apply {{%.*}}([[SECOND_X]], [[T2]])
567
567
// CHECK: cond_br {{%.*}}, [[SECOND_MATCH_CASE:bb[0-9]+]], [[SECOND_FAIL:bb[0-9]+]]
568
568
// CHECK: [[SECOND_MATCH_CASE]]:
569
+ // CHECK: br [[CASE_BODY]]([[SECOND_X]] : $Int)
570
+ // CHECK: [[CASE_BODY]]([[BODY_VAR:%.*]] : $Int):
569
571
// CHECK: [[A:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
570
- // CHECK: apply [[A]]([[SECOND_X ]])
572
+ // CHECK: apply [[A]]([[BODY_VAR ]])
571
573
a ( x: x)
572
574
default :
573
575
// CHECK: [[SECOND_FAIL]]:
@@ -591,22 +593,22 @@ func test_multiple_patterns3() {
591
593
// CHECK: [[A]]({{%.*}} : $(Int, Double)):
592
594
// CHECK: [[A_X:%.*]] = tuple_extract
593
595
// CHECK: [[A_N:%.*]] = tuple_extract
594
- // CHECK: [[FUNC_A:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
595
- // CHECK: apply [[FUNC_A]]([[A_X]])
596
+ // CHECK: br [[CASE_BODY:bb[0-9]+]]([[A_X]] : $Int, [[A_N]] : $Double)
596
597
597
598
// CHECK: [[B]]({{%.*}} : $(Double, Int)):
598
599
// CHECK: [[B_N:%.*]] = tuple_extract
599
600
// CHECK: [[B_X:%.*]] = tuple_extract
600
- // CHECK: [[FUNC_B:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
601
- // CHECK: apply [[FUNC_B]]([[B_X]])
601
+ // CHECK: br [[CASE_BODY]]([[B_X]] : $Int, [[B_N]] : $Double)
602
602
603
603
// CHECK: [[C]]({{%.*}} : $(Int, Int, Double)):
604
604
// CHECK: [[C__:%.*]] = tuple_extract
605
605
// CHECK: [[C_X:%.*]] = tuple_extract
606
606
// CHECK: [[C_N:%.*]] = tuple_extract
607
- // CHECK: [[FUNC_C:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
608
- // CHECK: apply [[FUNC_C]]([[C_X]])
607
+ // CHECK: br [[CASE_BODY]]([[C_X]] : $Int, [[C_N]] : $Double)
609
608
609
+ // CHECK: [[CASE_BODY]]([[BODY_X:%.*]] : $Int, [[BODY_N:%.*]] : $Double):
610
+ // CHECK: [[FUNC_A:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
611
+ // CHECK: apply [[FUNC_A]]([[BODY_X]])
610
612
a ( x: x)
611
613
}
612
614
}
@@ -630,25 +632,24 @@ func test_multiple_patterns4() {
630
632
// CHECK: [[A]]({{%.*}} : $(Int, Double)):
631
633
// CHECK: [[A_X:%.*]] = tuple_extract
632
634
// CHECK: [[A_N:%.*]] = tuple_extract
633
- // CHECK: [[FUNC_A:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
634
- // CHECK: apply [[FUNC_A]]([[A_X]])
635
+ // CHECK: br [[CASE_BODY:bb[0-9]+]]([[A_X]] : $Int)
635
636
636
637
// CHECK: [[B]]({{%.*}} : $(Double, Int)):
637
638
// CHECK: [[B_N:%.*]] = tuple_extract
638
639
// CHECK: [[B_X:%.*]] = tuple_extract
639
- // CHECK: [[FUNC_B:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
640
- // CHECK: apply [[FUNC_B]]([[B_X]])
640
+ // CHECK: br [[CASE_BODY]]([[B_X]] : $Int)
641
641
642
642
// CHECK: [[C]]({{%.*}} : $(Int, Int, Double)):
643
- // CHECK: [[FUNC_C:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
644
- // CHECK: apply [[FUNC_C]]([[Y_X]])
643
+ // CHECK: br [[CASE_BODY]]([[Y_X]] : $Int)
645
644
646
645
// CHECK: [[Z]]({{%.*}} : $(Int, Foo)):
647
646
// CHECK: [[Z_X:%.*]] = tuple_extract
648
647
// CHECK: [[Z_F:%.*]] = tuple_extract
649
- // CHECK: [[FUNC_Z:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
650
- // CHECK: apply [[FUNC_Z]]([[Z_X]])
648
+ // CHECK: br [[CASE_BODY]]([[Z_X]] : $Int)
651
649
650
+ // CHECK: [[CASE_BODY]]([[BODY_X:%.*]] : $Int):
651
+ // CHECK: [[FUNC_A:%.*]] = function_ref @_TF10switch_var1aFT1xSi_T_
652
+ // CHECK: apply [[FUNC_A]]([[BODY_X]])
652
653
a ( x: x)
653
654
}
654
655
}
@@ -669,33 +670,33 @@ func test_multiple_patterns5() {
669
670
// CHECK: [[A]]({{%.*}} : $(Int, Double)):
670
671
// CHECK: [[A_X:%.*]] = tuple_extract
671
672
// CHECK: [[A_N:%.*]] = tuple_extract
672
- // CHECK: [[A_BOX:%.*]] = project_box
673
- // CHECK: store [[A_X]] to [trivial] [[A_BOX]]
674
- // CHECK: [[FUNC_A:%.*]] = function_ref @_TF10switch_var3aaaFT1xRSi_T_
675
- // CHECK: apply [[FUNC_A]]([[A_BOX]])
673
+ // CHECK: br [[CASE_BODY:bb[0-9]+]]([[A_X]] : $Int)
676
674
677
675
// CHECK: [[B]]({{%.*}} : $(Double, Int)):
678
676
// CHECK: [[B_N:%.*]] = tuple_extract
679
677
// CHECK: [[B_X:%.*]] = tuple_extract
680
- // CHECK: [[B_BOX:%.*]] = project_box
681
- // CHECK: store [[B_X]] to [trivial] [[B_BOX]]
682
- // CHECK: [[FUNC_B:%.*]] = function_ref @_TF10switch_var3aaaFT1xRSi_T_
683
- // CHECK: apply [[FUNC_B]]([[B_BOX]])
678
+ // CHECK: br [[CASE_BODY]]([[B_X]] : $Int)
684
679
685
680
// CHECK: [[C]]({{%.*}} : $(Int, Int, Double)):
686
- // CHECK: [[Y_BOX:%.*]] = project_box
687
- // CHECK: store [[Y_X]] to [trivial] [[Y_BOX]]
688
- // CHECK: [[FUNC_C:%.*]] = function_ref @_TF10switch_var3aaaFT1xRSi_T_
689
- // CHECK: apply [[FUNC_C]]([[Y_BOX]])
681
+ // CHECK: br [[CASE_BODY]]([[Y_X]] : $Int)
690
682
691
683
// CHECK: [[Z]]({{%.*}} : $(Int, Foo)):
692
684
// CHECK: [[Z_X:%.*]] = tuple_extract
693
685
// CHECK: [[Z_F:%.*]] = tuple_extract
694
- // CHECK: [[Z_BOX:%.*]] = project_box
695
- // CHECK: store [[Z_X]] to [trivial] [[Z_BOX]]
696
- // CHECK: [[FUNC_Z:%.*]] = function_ref @_TF10switch_var3aaaFT1xRSi_T_
697
- // CHECK: apply [[FUNC_Z]]([[Z_BOX]])
686
+ // CHECK: br [[CASE_BODY]]([[Z_X]] : $Int)
687
+
688
+ // CHECK: [[CASE_BODY]]([[BODY_X:%.*]] : $Int):
689
+ // CHECK: store [[BODY_X]] to [trivial] [[BOX_X:%.*]] : $*Int
690
+ // CHECK: [[FUNC_AAA:%.*]] = function_ref @_TF10switch_var3aaaFT1xRSi_T_
691
+ // CHECK: apply [[FUNC_AAA]]([[BOX_X]])
698
692
aaa ( x: & x)
699
693
}
700
694
}
701
695
696
+ // rdar://problem/29252758 -- local decls must not be reemitted.
697
+ func test_against_reemission( x: Bar ) {
698
+ switch x {
699
+ case . Y( let a, _) , . Z( _, let a) :
700
+ let b = a
701
+ }
702
+ }
0 commit comments