blob: 8b0cf7c2fb8e66e4cff7316435a7c10340fb2484 [file] [log] [blame]
Vedant Kumarf2a6ec52016-10-14 23:38:13 +00001// RUN: %clang_cc1 -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
2
Alex Lorenz34ac9b52014-08-19 17:32:30 +00003 // CHECK: foo
Justin Bogner4da909b2015-02-03 21:35:49 +00004void foo(int i) { // CHECK-NEXT: File 0, [[@LINE]]:17 -> [[@LINE+8]]:2 = #0
Alex Lorenz08780522016-09-27 23:30:36 +00005 switch(i) {
Eli Friedman7f53fbfc2017-08-02 23:22:50 +00006 case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:11 = #2
Alex Lorenz34ac9b52014-08-19 17:32:30 +00007 return;
Justin Bogner4da909b2015-02-03 21:35:49 +00008 case 2: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = #3
Vedant Kumar85e6dce2017-08-04 00:29:20 +00009 break; // CHECK-NEXT: File 0, [[@LINE]]:10 -> [[@LINE+2]]:3 = #1
Justin Bognerbf42cfd2015-02-18 21:24:51 +000010 }
Alex Lorenz08780522016-09-27 23:30:36 +000011 int x = 0; // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:2 = #1
Justin Bognerbf42cfd2015-02-18 21:24:51 +000012}
13
Vedant Kumarf2a6ec52016-10-14 23:38:13 +000014int nop() { return 0; }
Justin Bognerbf42cfd2015-02-18 21:24:51 +000015
16 // CHECK: bar
17void bar(int i) { // CHECK-NEXT: File 0, [[@LINE]]:17 -> [[@LINE+20]]:2 = #0
Alex Lorenz08780522016-09-27 23:30:36 +000018 switch (i)
Justin Bognerbf42cfd2015-02-18 21:24:51 +000019 ; // CHECK-NEXT: File 0, [[@LINE]]:5 -> [[@LINE]]:6 = 0
20
Alex Lorenz08780522016-09-27 23:30:36 +000021 switch (i) { // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+16]]:2 = #1
Justin Bognerbf42cfd2015-02-18 21:24:51 +000022 }
23
Alex Lorenz08780522016-09-27 23:30:36 +000024 switch (i) // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+13]]:2 = #2
Justin Bognerbf42cfd2015-02-18 21:24:51 +000025 nop(); // CHECK-NEXT: File 0, [[@LINE]]:5 -> [[@LINE]]:10 = 0
26
Alex Lorenz08780522016-09-27 23:30:36 +000027 switch (i) // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+10]]:2 = #3
Justin Bognerbf42cfd2015-02-18 21:24:51 +000028 case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = #5
29 nop();
30
Alex Lorenz08780522016-09-27 23:30:36 +000031 switch (i) { // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+6]]:2 = #4
Justin Bognerbf42cfd2015-02-18 21:24:51 +000032 nop(); // CHECK-NEXT: File 0, [[@LINE]]:5 -> [[@LINE+2]]:10 = 0
33 case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = #7
34 nop();
35 }
Alex Lorenz08780522016-09-27 23:30:36 +000036 nop(); // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:2 = #6
Alex Lorenz34ac9b52014-08-19 17:32:30 +000037}
38
Vedant Kumarf2a6ec52016-10-14 23:38:13 +000039 // CHECK: baz
40void baz() { // CHECK-NEXT: File 0, [[@LINE]]:12 -> [[@LINE+5]]:2 = #0
41 switch (int i = true ? nop() // CHECK-NEXT: [[@LINE]]:26 -> [[@LINE]]:31 = #2
42 : nop(); // CHECK-NEXT: [[@LINE]]:26 -> [[@LINE]]:31 = (#0 - #2)
43 i) {}
44 nop(); // CHECK-NEXT: [[@LINE]]:3 -> [[@LINE+1]]:2 = #1
45}
46
Alex Lorenz34ac9b52014-08-19 17:32:30 +000047 // CHECK-NEXT: main
Vedant Kumarf2a6ec52016-10-14 23:38:13 +000048int main() { // CHECK-NEXT: File 0, [[@LINE]]:12 -> [[@LINE+35]]:2 = #0
Alex Lorenz34ac9b52014-08-19 17:32:30 +000049 int i = 0;
Alex Lorenz08780522016-09-27 23:30:36 +000050 switch(i) {
Eli Friedman7f53fbfc2017-08-02 23:22:50 +000051 case 0: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:10 = #2
Alex Lorenz34ac9b52014-08-19 17:32:30 +000052 i = 1;
53 break;
Justin Bogner4da909b2015-02-03 21:35:49 +000054 case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:10 = #3
Alex Lorenz34ac9b52014-08-19 17:32:30 +000055 i = 2;
56 break;
Justin Bogner4da909b2015-02-03 21:35:49 +000057 default: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = #4
Vedant Kumar85e6dce2017-08-04 00:29:20 +000058 break; // CHECK-NEXT: File 0, [[@LINE]]:10 -> [[@LINE+2]]:3 = #1
Justin Bognerbf42cfd2015-02-18 21:24:51 +000059 }
Vedant Kumarf2a6ec52016-10-14 23:38:13 +000060 switch(i) { // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+23]]:2 = #1
Eli Friedman7f53fbfc2017-08-02 23:22:50 +000061 case 0: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:10 = #6
Alex Lorenz34ac9b52014-08-19 17:32:30 +000062 i = 1;
63 break;
Justin Bognerbf42cfd2015-02-18 21:24:51 +000064 case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+3]]:10 = #7
Alex Lorenz34ac9b52014-08-19 17:32:30 +000065 i = 2;
Justin Bogner4da909b2015-02-03 21:35:49 +000066 default: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:10 = (#7 + #8)
Vedant Kumar85e6dce2017-08-04 00:29:20 +000067 break; // CHECK-NEXT: File 0, [[@LINE]]:10 -> [[@LINE+3]]:3 = #5
Justin Bognerbf42cfd2015-02-18 21:24:51 +000068 }
Alex Lorenz34ac9b52014-08-19 17:32:30 +000069
Vedant Kumarf2a6ec52016-10-14 23:38:13 +000070 switch(i) { // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+13]]:2 = #5
Justin Bognerbf42cfd2015-02-18 21:24:51 +000071 case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+5]]:11 = #10
72 case 2: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+4]]:11 = (#10 + #11)
Alex Lorenz34ac9b52014-08-19 17:32:30 +000073 i = 11;
Justin Bognerbf42cfd2015-02-18 21:24:51 +000074 case 3: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:11 = ((#10 + #11) + #12)
Justin Bogner4da909b2015-02-03 21:35:49 +000075 case 4: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+1]]:11 = (((#10 + #11) + #12) + #13)
Alex Lorenz34ac9b52014-08-19 17:32:30 +000076 i = 99;
Justin Bognerbf42cfd2015-02-18 21:24:51 +000077 }
Alex Lorenz34ac9b52014-08-19 17:32:30 +000078
Vedant Kumarf2a6ec52016-10-14 23:38:13 +000079 foo(1); // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+3]]:11 = #9
Justin Bognerbf42cfd2015-02-18 21:24:51 +000080 bar(1);
Vedant Kumarf2a6ec52016-10-14 23:38:13 +000081 baz();
Alex Lorenz34ac9b52014-08-19 17:32:30 +000082 return 0;
83}
Eli Friedman7f53fbfc2017-08-02 23:22:50 +000084
85// FIXME: End location for "case 1" shouldn't point at the end of the switch.
86 // CHECK: fallthrough
87int fallthrough(int i) { // CHECK-NEXT: File 0, [[@LINE]]:24 -> [[@LINE+12]]:2 = #0
88 switch(i) {
89 case 1: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+8]]:10 = #2
90 i = 23;
91 case 2: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:10 = (#2 + #3)
92 i = 11;
93 break;
94 case 3: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+3]]:10 = #4
95 case 4: // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE+2]]:10 = (#4 + #5)
96 i = 99;
97 break;
98 }
99}