1*67e74705SXin Li // RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name switch.c %s | FileCheck %s
2*67e74705SXin Li // CHECK: foo
foo(int i)3*67e74705SXin Li void foo(int i) { // CHECK-NEXT: File 0, [[@LINE]]:17 -> [[@LINE+8]]:2 = #0
4*67e74705SXin Li switch(i) { // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+5]]:4 = #1
5*67e74705SXin Li case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+3]]:10 = #2
6*67e74705SXin Li return;
7*67e74705SXin Li case 2: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = #3
8*67e74705SXin Li break;
9*67e74705SXin Li }
10*67e74705SXin Li int x = 0;
11*67e74705SXin Li }
12*67e74705SXin Li
nop()13*67e74705SXin Li void nop() {}
14*67e74705SXin Li
15*67e74705SXin Li // CHECK: bar
bar(int i)16*67e74705SXin Li void bar(int i) { // CHECK-NEXT: File 0, [[@LINE]]:17 -> [[@LINE+20]]:2 = #0
17*67e74705SXin Li switch (i) // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:6 = #1
18*67e74705SXin Li ; // CHECK-NEXT: File 0, [[@LINE]]:5 -> [[@LINE]]:6 = 0
19*67e74705SXin Li
20*67e74705SXin Li switch (i) { // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:4 = #2
21*67e74705SXin Li }
22*67e74705SXin Li
23*67e74705SXin Li switch (i) // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = #3
24*67e74705SXin Li nop(); // CHECK-NEXT: File 0, [[@LINE]]:5 -> [[@LINE]]:10 = 0
25*67e74705SXin Li
26*67e74705SXin Li switch (i) // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:10 = #4
27*67e74705SXin Li case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = #5
28*67e74705SXin Li nop();
29*67e74705SXin Li
30*67e74705SXin Li switch (i) { // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+4]]:4 = #6
31*67e74705SXin Li nop(); // CHECK-NEXT: File 0, [[@LINE]]:5 -> [[@LINE+2]]:10 = 0
32*67e74705SXin Li case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = #7
33*67e74705SXin Li nop();
34*67e74705SXin Li }
35*67e74705SXin Li nop();
36*67e74705SXin Li }
37*67e74705SXin Li
38*67e74705SXin Li // CHECK-NEXT: main
main()39*67e74705SXin Li int main() { // CHECK-NEXT: File 0, [[@LINE]]:12 -> [[@LINE+34]]:2 = #0
40*67e74705SXin Li int i = 0;
41*67e74705SXin Li switch(i) { // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+9]]:4 = #1
42*67e74705SXin Li case 0: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+7]]:10 = #2
43*67e74705SXin Li i = 1;
44*67e74705SXin Li break;
45*67e74705SXin Li case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:10 = #3
46*67e74705SXin Li i = 2;
47*67e74705SXin Li break;
48*67e74705SXin Li default: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = #4
49*67e74705SXin Li break;
50*67e74705SXin Li }
51*67e74705SXin Li switch(i) { // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+8]]:4 = #5
52*67e74705SXin Li case 0: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+6]]:10 = #6
53*67e74705SXin Li i = 1;
54*67e74705SXin Li break;
55*67e74705SXin Li case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+3]]:10 = #7
56*67e74705SXin Li i = 2;
57*67e74705SXin Li default: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = (#7 + #8)
58*67e74705SXin Li break;
59*67e74705SXin Li }
60*67e74705SXin Li
61*67e74705SXin Li switch(i) { // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+7]]:4 = #9
62*67e74705SXin Li case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+5]]:11 = #10
63*67e74705SXin Li case 2: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+4]]:11 = (#10 + #11)
64*67e74705SXin Li i = 11;
65*67e74705SXin Li case 3: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:11 = ((#10 + #11) + #12)
66*67e74705SXin Li case 4: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:11 = (((#10 + #11) + #12) + #13)
67*67e74705SXin Li i = 99;
68*67e74705SXin Li }
69*67e74705SXin Li
70*67e74705SXin Li foo(1);
71*67e74705SXin Li bar(1);
72*67e74705SXin Li return 0;
73*67e74705SXin Li }
74