xref: /llvm-project/clang/test/CoverageMapping/branch-macros.cpp (revision 16f3401eae4310c95163269c41d9b45261f0c7c3)
19f2967bcSAlan Phipps // Test that branch regions are generated for conditions in nested macro
29f2967bcSAlan Phipps // expansions.
39f2967bcSAlan Phipps 
4*16f3401eSAlan Phipps // RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++11 -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name branch-macros.cpp %s | FileCheck %s
59f2967bcSAlan Phipps 
69f2967bcSAlan Phipps #define COND1 (a == b)
79f2967bcSAlan Phipps #define COND2 (a != b)
89f2967bcSAlan Phipps #define COND3 (COND1 && COND2)
99f2967bcSAlan Phipps #define COND4 (COND3 ? COND2 : COND1)
109f2967bcSAlan Phipps #define MACRO1 COND3
119f2967bcSAlan Phipps #define MACRO2 MACRO1
129f2967bcSAlan Phipps #define MACRO3 MACRO2
139f2967bcSAlan Phipps 
149f2967bcSAlan Phipps 
159f2967bcSAlan Phipps // CHECK-LABEL: _Z4funcii:
func(int a,int b)169f2967bcSAlan Phipps bool func(int a, int b) {
179f2967bcSAlan Phipps                              // CHECK: Branch,File 0, [[@LINE+15]]:12 -> [[@LINE+15]]:13 = #17, (#0 - #17)
189f2967bcSAlan Phipps                              // CHECK: Branch,File 0, [[@LINE+14]]:17 -> [[@LINE+14]]:18 = #18, (#17 - #18)
199f2967bcSAlan Phipps                              // CHECK: Branch,File 0, [[@LINE+13]]:22 -> [[@LINE+13]]:23 = #16, (#15 - #16)
209f2967bcSAlan Phipps                              // CHECK: Branch,File 0, [[@LINE+12]]:27 -> [[@LINE+12]]:28 = #14, (#13 - #14)
219f2967bcSAlan Phipps                              // CHECK: Branch,File 0, [[@LINE+11]]:32 -> [[@LINE+11]]:33 = #12, (#11 - #12)
229f2967bcSAlan Phipps     bool c = COND1 && COND2; // CHECK: Branch,File 1, [[@LINE-16]]:15 -> [[@LINE-16]]:23 = #1, (#0 - #1)
239f2967bcSAlan Phipps                              // CHECK: Branch,File 2, [[@LINE-16]]:15 -> [[@LINE-16]]:23 = #2, (#1 - #2)
249f2967bcSAlan Phipps     bool d = COND3;          // CHECK: Branch,File 7, [[@LINE-18]]:15 -> [[@LINE-18]]:23 = #3, (#0 - #3)
259f2967bcSAlan Phipps                              // CHECK: Branch,File 8, [[@LINE-18]]:15 -> [[@LINE-18]]:23 = #4, (#3 - #4)
269f2967bcSAlan Phipps     bool e = MACRO1;         // CHECK: Branch,File 12, [[@LINE-20]]:15 -> [[@LINE-20]]:23 = #5, (#0 - #5)
279f2967bcSAlan Phipps                              // CHECK: Branch,File 13, [[@LINE-20]]:15 -> [[@LINE-20]]:23 = #6, (#5 - #6)
289f2967bcSAlan Phipps     bool f = MACRO2;         // CHECK: Branch,File 16, [[@LINE-22]]:15 -> [[@LINE-22]]:23 = #7, (#0 - #7)
299f2967bcSAlan Phipps                              // CHECK: Branch,File 17, [[@LINE-22]]:15 -> [[@LINE-22]]:23 = #8, (#7 - #8)
309f2967bcSAlan Phipps     bool g = MACRO3;         // CHECK: Branch,File 19, [[@LINE-24]]:15 -> [[@LINE-24]]:23 = #9, (#0 - #9)
319f2967bcSAlan Phipps                              // CHECK: Branch,File 20, [[@LINE-24]]:15 -> [[@LINE-24]]:23 = #10, (#9 - #10)
329f2967bcSAlan Phipps     return c && d && e && f && g;
339f2967bcSAlan Phipps }
349f2967bcSAlan Phipps 
359f2967bcSAlan Phipps // CHECK-LABEL: _Z5func2ii:
func2(int a,int b)369f2967bcSAlan Phipps bool func2(int a, int b) {
379f2967bcSAlan Phipps     bool h = MACRO3 || COND4;// CHECK: Branch,File 2, [[@LINE-28]]:15 -> [[@LINE-28]]:38 = (#1 - #2), #2
389f2967bcSAlan Phipps                              // CHECK: Branch,File 8, [[@LINE-32]]:15 -> [[@LINE-32]]:23 = #6, (#1 - #6)
399f2967bcSAlan Phipps                              // CHECK: Branch,File 9, [[@LINE-32]]:15 -> [[@LINE-32]]:23 = #7, (#6 - #7)
409f2967bcSAlan Phipps                              // CHECK: Branch,File 11, [[@LINE-34]]:15 -> [[@LINE-34]]:23 = #3, (#0 - #3)
419f2967bcSAlan Phipps                              // CHECK: Branch,File 12, [[@LINE-34]]:15 -> [[@LINE-34]]:23 = #4, (#3 - #4)
429f2967bcSAlan Phipps     return h;
439f2967bcSAlan Phipps }
44