19caa3fbeSZequan Wu // RUN: %clang_cc1 -mllvm -emptyline-comment-coverage=false -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -std=c++1z -triple %itanium_abi_triple -main-file-name switch.cpp %s | FileCheck %s
2f2a6ec55SVedant Kumar
3f2a6ec55SVedant Kumar // CHECK: foo
foo(int i)4*9783e209SZequan Wu void foo(int i) { // CHECK-NEXT: File 0, [[@LINE]]:17 -> [[@LINE+11]]:2 = #0
59f2967bcSAlan Phipps switch(i) { // CHECK-NEXT: Branch,File 0, [[@LINE]]:10 -> [[@LINE]]:11 = ((#0 - #2) - #3), (#2 + #3)
6*9783e209SZequan Wu // CHECK-NEXT: Gap,File 0, [[@LINE-1]]:13 -> [[@LINE+5]]:10 = 0
77f53fbfcSEli Friedman case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:11 = #2
89f2967bcSAlan Phipps return; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #2, (#0 - #2)
9*9783e209SZequan Wu // CHECK-NEXT: Gap,File 0, [[@LINE-1]]:12 -> [[@LINE+1]]:3 = 0
10f2a6ec55SVedant Kumar case 2: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = #3
119f2967bcSAlan Phipps break; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #3, (#0 - #3)
12*9783e209SZequan Wu
13*9783e209SZequan Wu } // CHECK-NEXT: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = #1
14f2a6ec55SVedant Kumar int x = 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:2 = #1
15f2a6ec55SVedant Kumar }
16f2a6ec55SVedant Kumar
nop()17f2a6ec55SVedant Kumar int nop() { return 0; }
18f2a6ec55SVedant Kumar
19f2a6ec55SVedant Kumar // CHECK: bar
bar(int i)209f2967bcSAlan Phipps void bar(int i) { // CHECK-NEXT: File 0, [[@LINE]]:17 -> [[@LINE+21]]:2 = #0
219f2967bcSAlan Phipps switch (i) // CHECK-NEXT: Branch,File 0, [[@LINE]]:11 -> [[@LINE]]:12 = #0, 0
22f2a6ec55SVedant Kumar ; // CHECK-NEXT: File 0, [[@LINE]]:5 -> [[@LINE]]:6 = 0
23f2a6ec55SVedant Kumar
249f2967bcSAlan Phipps switch (i) { // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+17]]:2 = #1
259f2967bcSAlan Phipps } // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:11 -> [[@LINE-1]]:12 = #1, 0
26f2a6ec55SVedant Kumar
279f2967bcSAlan Phipps switch (i) // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+14]]:2 = #2
289f2967bcSAlan Phipps nop(); // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:11 -> [[@LINE-1]]:12 = #2, 0
299f2967bcSAlan Phipps // CHECK-NEXT: File 0, [[@LINE-1]]:5 -> [[@LINE-1]]:10 = 0
309f2967bcSAlan Phipps switch (i) // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+11]]:2 = #3
319f2967bcSAlan Phipps case 1: // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:11 -> [[@LINE-1]]:12 = (#3 - #5), #5
329f2967bcSAlan Phipps // CHECK-NEXT: File 0, [[@LINE-1]]:3 -> [[@LINE+1]]:10 = #5
339f2967bcSAlan Phipps nop(); // CHECK-NEXT: Branch,File 0, [[@LINE-2]]:3 -> [[@LINE-2]]:9 = #5, (#3 - #5)
349f2967bcSAlan Phipps // CHECK-NEXT: File 0, [[@LINE+1]]:3 -> [[@LINE+7]]:2 = #4
359f2967bcSAlan Phipps switch (i) { // CHECK-NEXT: Branch,File 0, [[@LINE]]:11 -> [[@LINE]]:12 = (#4 - #7), #7
36859bf4d2SVedant Kumar nop(); // CHECK-NEXT: Gap,File 0, [[@LINE-1]]:14 -> [[@LINE+2]]:10 = 0
37f2a6ec55SVedant Kumar case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = #7
389f2967bcSAlan Phipps nop(); // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #7, (#4 - #7)
39f2a6ec55SVedant Kumar }
40f2a6ec55SVedant Kumar nop(); // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:2 = #6
41f2a6ec55SVedant Kumar }
42f2a6ec55SVedant Kumar
43f2a6ec55SVedant Kumar // CHECK: baz
baz()44f2a6ec55SVedant Kumar void baz() { // CHECK-NEXT: File 0, [[@LINE]]:12 -> [[@LINE+5]]:2 = #0
452e8c8759SVedant Kumar switch (int i = true ? nop() // CHECK: [[@LINE]]:26 -> [[@LINE]]:31 = #2
46f2a6ec55SVedant Kumar : nop(); // CHECK-NEXT: [[@LINE]]:26 -> [[@LINE]]:31 = (#0 - #2)
479f2967bcSAlan Phipps i) {} // CHECK-NEXT: Branch,File 0, [[@LINE]]:11 -> [[@LINE]]:12 = #0, 0
48f2a6ec55SVedant Kumar nop(); // CHECK-NEXT: [[@LINE]]:3 -> [[@LINE+1]]:2 = #1
49f2a6ec55SVedant Kumar }
50f2a6ec55SVedant Kumar
51f2a6ec55SVedant Kumar // CHECK-NEXT: main
main()52*9783e209SZequan Wu int main() { // CHECK-NEXT: File 0, [[@LINE]]:12 -> [[@LINE+39]]:2 = #0
53f2a6ec55SVedant Kumar int i = 0;
54859bf4d2SVedant Kumar switch(i) { // CHECK-NEXT: Gap,File 0, [[@LINE]]:13 -> [[@LINE+8]]:10 = 0
557f53fbfcSEli Friedman case 0: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:10 = #2
569f2967bcSAlan Phipps i = 1; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #2, (#0 - #2)
57*9783e209SZequan Wu break; // CHECK-NEXT: Gap,File 0, [[@LINE]]:11 -> [[@LINE+1]]:3 = 0
58f2a6ec55SVedant Kumar case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:10 = #3
599f2967bcSAlan Phipps i = 2; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #3, (#0 - #3)
60*9783e209SZequan Wu break; // CHECK-NEXT: Gap,File 0, [[@LINE]]:11 -> [[@LINE+1]]:3 = 0
61f2a6ec55SVedant Kumar default: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = #4
629f2967bcSAlan Phipps break; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:10 = #4, (#0 - #4)
63*9783e209SZequan Wu } // CHECK-NEXT: Gap,File 0, [[@LINE]]:4 -> [[@LINE+1]]:3 = #1
64*9783e209SZequan Wu switch(i) { // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+27]]:2 = #1
65*9783e209SZequan Wu case 0: // CHECK-NEXT: Gap,File 0, [[@LINE-1]]:13 -> [[@LINE+7]]:10 = 0
66859bf4d2SVedant Kumar i = 1; // CHECK-NEXT: File 0, [[@LINE-1]]:3 -> [[@LINE+1]]:10 = #6
679f2967bcSAlan Phipps break; // CHECK-NEXT: Branch,File 0, [[@LINE-2]]:3 -> [[@LINE-2]]:9 = #6, (#1 - #6)
68*9783e209SZequan Wu // CHECK-NEXT: Gap,File 0, [[@LINE-1]]:11 -> [[@LINE+1]]:3 = 0
69f2a6ec55SVedant Kumar case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+3]]:10 = #7
709f2967bcSAlan Phipps i = 2; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #7, (#1 - #7)
71f2a6ec55SVedant Kumar default: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = (#7 + #8)
729f2967bcSAlan Phipps break; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:10 = #8, (#1 - #8)
73*9783e209SZequan Wu } // CHECK-NEXT: Gap,File 0, [[@LINE]]:4 -> [[@LINE+2]]:3 = #5
749f2967bcSAlan Phipps // CHECK-NEXT: File 0, [[@LINE+1]]:3 -> [[@LINE+17]]:2 = #5
759f2967bcSAlan Phipps switch(i) { // CHECK-NEXT: Branch,File 0, [[@LINE]]:10 -> [[@LINE]]:11 = ((((#5 - #10) - #11) - #12) - #13), (((#10 + #11) + #12) + #13)
769f2967bcSAlan Phipps // CHECK-NEXT: Gap,File 0, [[@LINE-1]]:13 -> [[@LINE+8]]:11 = 0
779f2967bcSAlan Phipps case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+7]]:11 = #10
789f2967bcSAlan Phipps // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #10, (#5 - #10)
799f2967bcSAlan Phipps case 2: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+5]]:11 = (#10 + #11)
809f2967bcSAlan Phipps i = 11; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #11, (#5 - #11)
819f2967bcSAlan Phipps case 3: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+3]]:11 = ((#10 + #11) + #12)
829f2967bcSAlan Phipps // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #12, (#5 - #12)
83f2a6ec55SVedant Kumar case 4: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:11 = (((#10 + #11) + #12) + #13)
849f2967bcSAlan Phipps i = 99; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #13, (#5 - #13)
85f2a6ec55SVedant Kumar }
86f2a6ec55SVedant Kumar
87f2a6ec55SVedant Kumar foo(1); // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+3]]:11 = #9
88f2a6ec55SVedant Kumar bar(1);
89f2a6ec55SVedant Kumar baz();
90f2a6ec55SVedant Kumar return 0;
91f2a6ec55SVedant Kumar }
927f53fbfcSEli Friedman
93859bf4d2SVedant Kumar // CHECK: pr44011
pr44011(int i)94859bf4d2SVedant Kumar int pr44011(int i) { // CHECK-NEXT: File 0, [[@LINE]]:20 -> {{.*}}:2 = #0
95859bf4d2SVedant Kumar switch (i) { // CHECK-NEXT: Gap,File 0, [[@LINE]]:14 -> [[@LINE+6]]:13 = 0
96859bf4d2SVedant Kumar
97859bf4d2SVedant Kumar case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:13 = #2
989f2967bcSAlan Phipps return 0; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #2, (#0 - #2)
99*9783e209SZequan Wu // CHECK-NEXT: Gap,File 0, [[@LINE-1]]:14 -> [[@LINE+1]]:3 = 0
100859bf4d2SVedant Kumar default: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:13 = #3
1019f2967bcSAlan Phipps return 1; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:10 = #3, (#0 - #3)
102859bf4d2SVedant Kumar }
103859bf4d2SVedant Kumar } // A region for counter #1 is missing due to the missing return.
104859bf4d2SVedant Kumar
105859bf4d2SVedant Kumar
1067f53fbfcSEli Friedman // FIXME: End location for "case 1" shouldn't point at the end of the switch.
1077f53fbfcSEli Friedman // CHECK: fallthrough
fallthrough(int i)1089f2967bcSAlan Phipps int fallthrough(int i) { // CHECK-NEXT: File 0, [[@LINE]]:24 -> [[@LINE+14]]:2 = #0
1099f2967bcSAlan Phipps // CHECK-NEXT: Branch,File 0, [[@LINE+1]]:10 -> [[@LINE+1]]:11 = ((((#0 - #2) - #3) - #4) - #5), (((#2 + #3) + #4) + #5)
1109f2967bcSAlan Phipps switch(i) { // CHECK-NEXT: Gap,File 0, [[@LINE]]:13 -> [[@LINE+10]]:10 = 0
1119f2967bcSAlan Phipps case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+9]]:10 = #2
1129f2967bcSAlan Phipps i = 23; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #2, (#0 - #2)
1137f53fbfcSEli Friedman case 2: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:10 = (#2 + #3)
1149f2967bcSAlan Phipps i = 11; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #3, (#0 - #3)
115*9783e209SZequan Wu break; // CHECK-NEXT: Gap,File 0, [[@LINE]]:11 -> [[@LINE+1]]:3 = 0
1169f2967bcSAlan Phipps case 3: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+4]]:10 = #4
1179f2967bcSAlan Phipps // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #4, (#0 - #4)
1187f53fbfcSEli Friedman case 4: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:10 = (#4 + #5)
1199f2967bcSAlan Phipps i = 99; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #5, (#0 - #5)
1207f53fbfcSEli Friedman break;
1217f53fbfcSEli Friedman }
1227f53fbfcSEli Friedman }
123181dfe4cSEli Friedman
124181dfe4cSEli Friedman void abort(void) __attribute((noreturn));
125181dfe4cSEli Friedman // CHECK: noret
noret(int x)126*9783e209SZequan Wu int noret(int x) { // CHECK-NEXT: File 0, [[@LINE]]:18 -> [[@LINE+11]]:2
127*9783e209SZequan Wu switch (x) { // CHECK-NEXT: Gap,File 0, [[@LINE]]:14 -> [[@LINE+8]]:14 = 0
128181dfe4cSEli Friedman default: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:12
1299f2967bcSAlan Phipps abort(); // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:10 = #2, (#0 - #2)
130*9783e209SZequan Wu // CHECK-NEXT: Gap,File 0, [[@LINE-1]]:13 -> [[@LINE+1]]:3 = 0
131181dfe4cSEli Friedman case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:13
1329f2967bcSAlan Phipps return 5; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #3, (#0 - #3)
133*9783e209SZequan Wu // CHECK-NEXT: Gap,File 0, [[@LINE-1]]:14 -> [[@LINE+1]]:3 = 0
134181dfe4cSEli Friedman case 2: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:14
1359f2967bcSAlan Phipps return 10; // CHECK-NEXT: Branch,File 0, [[@LINE-1]]:3 -> [[@LINE-1]]:9 = #4, (#0 - #4)
136181dfe4cSEli Friedman }
137181dfe4cSEli Friedman }
138