xref: /llvm-project/clang/test/CoverageMapping/branch-logical-mixed.cpp (revision 9f2967bcfe2f7d1fc02281f0098306c90c2c10a5)
1*9f2967bcSAlan Phipps // Test to ensure that each branch condition has an associated branch region
2*9f2967bcSAlan Phipps // with expected True/False counters.
3*9f2967bcSAlan Phipps 
4*9f2967bcSAlan Phipps // RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name branch-logical-mixed.cpp %s | FileCheck %s
5*9f2967bcSAlan Phipps 
6*9f2967bcSAlan Phipps 
7*9f2967bcSAlan Phipps 
8*9f2967bcSAlan Phipps 
func()9*9f2967bcSAlan Phipps bool func() {                        // CHECK: File 0, [[@LINE]]:13 -> [[@LINE+55]]:2 = #0
10*9f2967bcSAlan Phipps   bool bt0 = true;
11*9f2967bcSAlan Phipps   bool bt1 = true;
12*9f2967bcSAlan Phipps   bool bt2 = true;
13*9f2967bcSAlan Phipps   bool bt3 = true;
14*9f2967bcSAlan Phipps   bool bt4 = true;
15*9f2967bcSAlan Phipps   bool bt5 = true;
16*9f2967bcSAlan Phipps   bool bf0 = false;
17*9f2967bcSAlan Phipps   bool bf1 = false;
18*9f2967bcSAlan Phipps   bool bf2 = false;
19*9f2967bcSAlan Phipps   bool bf3 = false;
20*9f2967bcSAlan Phipps   bool bf4 = false;
21*9f2967bcSAlan Phipps   bool bf5 = false;
22*9f2967bcSAlan Phipps 
23*9f2967bcSAlan Phipps   bool a = bt0 &&                   // CHECK: Branch,File 0, [[@LINE]]:12 -> [[@LINE]]:15 = #9, (#0 - #9)
24*9f2967bcSAlan Phipps            bf0 &&                   // CHECK: Branch,File 0, [[@LINE]]:12 -> [[@LINE]]:15 = #10, (#9 - #10)
25*9f2967bcSAlan Phipps            bt1 &&                   // CHECK: Branch,File 0, [[@LINE]]:12 -> [[@LINE]]:15 = #8, (#7 - #8)
26*9f2967bcSAlan Phipps            bf1 &&                   // CHECK: Branch,File 0, [[@LINE]]:12 -> [[@LINE]]:15 = #6, (#5 - #6)
27*9f2967bcSAlan Phipps            bt2 &&                   // CHECK: Branch,File 0, [[@LINE]]:12 -> [[@LINE]]:15 = #4, (#3 - #4)
28*9f2967bcSAlan Phipps            bf2;                     // CHECK: Branch,File 0, [[@LINE]]:12 -> [[@LINE]]:15 = #2, (#1 - #2)
29*9f2967bcSAlan Phipps 
30*9f2967bcSAlan Phipps   bool b = bt0 ||                   // CHECK: Branch,File 0, [[@LINE]]:12 -> [[@LINE]]:15 = (#0 - #19), #19
31*9f2967bcSAlan Phipps            bf0 ||                   // CHECK: Branch,File 0, [[@LINE]]:12 -> [[@LINE]]:15 = (#19 - #20), #20
32*9f2967bcSAlan Phipps            bt1 ||                   // CHECK: Branch,File 0, [[@LINE]]:12 -> [[@LINE]]:15 = (#17 - #18), #18
33*9f2967bcSAlan Phipps            bf1 ||                   // CHECK: Branch,File 0, [[@LINE]]:12 -> [[@LINE]]:15 = (#15 - #16), #16
34*9f2967bcSAlan Phipps            bt2 ||                   // CHECK: Branch,File 0, [[@LINE]]:12 -> [[@LINE]]:15 = (#13 - #14), #14
35*9f2967bcSAlan Phipps            bf2;                     // CHECK: Branch,File 0, [[@LINE]]:12 -> [[@LINE]]:15 = (#11 - #12), #12
36*9f2967bcSAlan Phipps 
37*9f2967bcSAlan Phipps   bool c = (bt0  &&                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = #26, (#0 - #26)
38*9f2967bcSAlan Phipps             bf0) ||                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = #27, (#26 - #27)
39*9f2967bcSAlan Phipps            (bt1  &&                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = #28, (#25 - #28)
40*9f2967bcSAlan Phipps             bf1) ||                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = #29, (#28 - #29)
41*9f2967bcSAlan Phipps            (bt2  &&                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = #30, (#24 - #30)
42*9f2967bcSAlan Phipps             bf2) ||                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = #31, (#30 - #31)
43*9f2967bcSAlan Phipps            (bt3  &&                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = #32, (#23 - #32)
44*9f2967bcSAlan Phipps             bf3) ||                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = #33, (#32 - #33)
45*9f2967bcSAlan Phipps            (bt4  &&                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = #34, (#22 - #34)
46*9f2967bcSAlan Phipps             bf4) ||                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = #35, (#34 - #35)
47*9f2967bcSAlan Phipps            (bf5  &&                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = #36, (#21 - #36)
48*9f2967bcSAlan Phipps             bf5);                   // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = #37, (#36 - #37)
49*9f2967bcSAlan Phipps 
50*9f2967bcSAlan Phipps   bool d = (bt0  ||                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = (#0 - #43), #43
51*9f2967bcSAlan Phipps             bf0) &&                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = (#43 - #44), #44
52*9f2967bcSAlan Phipps            (bt1  ||                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = (#42 - #45), #45
53*9f2967bcSAlan Phipps             bf1) &&                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = (#45 - #46), #46
54*9f2967bcSAlan Phipps            (bt2  ||                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = (#41 - #47), #47
55*9f2967bcSAlan Phipps             bf2) &&                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = (#47 - #48), #48
56*9f2967bcSAlan Phipps            (bt3  ||                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = (#40 - #49), #49
57*9f2967bcSAlan Phipps             bf3) &&                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = (#49 - #50), #50
58*9f2967bcSAlan Phipps            (bt4  ||                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = (#39 - #51), #51
59*9f2967bcSAlan Phipps             bf4) &&                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = (#51 - #52), #52
60*9f2967bcSAlan Phipps            (bt5  ||                 // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = (#38 - #53), #53
61*9f2967bcSAlan Phipps             bf5);                   // CHECK: Branch,File 0, [[@LINE]]:13 -> [[@LINE]]:16 = (#53 - #54), #54
62*9f2967bcSAlan Phipps 
63*9f2967bcSAlan Phipps   return a && b && c && d;
64*9f2967bcSAlan Phipps }
65