1 // RUN: %clang_cc1 -fprofile-instr-generate -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name macroscopes.cpp %s | FileCheck %s 2 3 #define starts_a_scope for (int i = 0; i < 2; ++i) { 4 5 #define ends_a_scope \ 6 x = x; \ 7 } 8 9 #define some_code \ 10 x = x; \ 11 if (x == 0) { \ 12 x = 1; \ 13 } else { \ 14 x = 2; \ 15 } \ 16 if (true) { \ 17 x = x; \ 18 } else { \ 19 x = x; \ 20 } 21 22 #define starts_a_while while (x < 5) 23 #define simple_stmt ++x 24 25 // CHECK: main 26 // CHECK-NEXT: File 0, [[@LINE+1]]:12 -> {{[0-9]+}}:2 = #0 27 int main() { 28 int x = 0; 29 // CHECK-NEXT: Expansion,File 0, [[@LINE+2]]:3 -> [[@LINE+2]]:17 = #0 30 // CHECK-NEXT: File 0, [[@LINE+1]]:17 -> [[@LINE+7]]:15 = #1 31 starts_a_scope 32 x = x; 33 // CHECK-NEXT: Expansion,File 0, [[@LINE+1]]:5 -> [[@LINE+1]]:14 = #1 34 some_code 35 x = x; 36 // CHECK-NEXT: Expansion,File 0, [[@LINE+1]]:3 -> [[@LINE+1]]:15 = #1 37 ends_a_scope 38 39 // CHECK-NEXT: Expansion,File 0, [[@LINE+4]]:3 -> [[@LINE+4]]:17 = #0 40 // CHECK-NEXT: File 0, [[@LINE+3]]:17 -> [[@LINE+5]]:15 = #4 41 // CHECK-NEXT: Expansion,File 0, [[@LINE+3]]:5 -> [[@LINE+3]]:14 = #4 42 // CHECK-NEXT: Expansion,File 0, [[@LINE+3]]:3 -> [[@LINE+3]]:15 = #4 43 starts_a_scope 44 some_code 45 ends_a_scope 46 47 // CHECK-NEXT: Expansion,File 0, [[@LINE+3]]:3 -> [[@LINE+3]]:17 = #0 48 // CHECK-NEXT: File 0, [[@LINE+2]]:17 -> [[@LINE+3]]:15 = #7 49 // CHECK-NEXT: Expansion,File 0, [[@LINE+2]]:3 -> [[@LINE+2]]:15 = #7 50 starts_a_scope 51 ends_a_scope 52 53 // CHECK-NEXT: Expansion,File 0, [[@LINE+2]]:3 -> [[@LINE+2]]:17 = #0 54 // CHECK-NEXT: Expansion,File 0, [[@LINE+2]]:5 -> [[@LINE+2]]:16 = #8 55 starts_a_while 56 simple_stmt; 57 58 x = 0; 59 // CHECK-NEXT: Expansion,File 0, [[@LINE+4]]:3 -> [[@LINE+4]]:17 = #0 60 // CHECK-NEXT: File 0, [[@LINE+3]]:18 -> [[@LINE+5]]:15 = #9 61 // CHECK-NEXT: Expansion,File 0, [[@LINE+3]]:5 -> [[@LINE+3]]:16 = #9 62 // CHECK-NEXT: Expansion,File 0, [[@LINE+3]]:3 -> [[@LINE+3]]:15 = #9 63 starts_a_while { 64 simple_stmt; 65 ends_a_scope 66 67 return 0; 68 } 69 70 // CHECK-NEXT: File 1, 3:24 -> 3:53 = #0 71 // CHECK-NEXT: File 1, 3:40 -> 3:45 = (#0 + #1) 72 // CHECK-NEXT: File 1, 3:47 -> 3:50 = #1 73 // CHECK-NEXT: File 1, 3:52 -> 3:53 = #1 74 // CHECK-NEXT: File 2, 10:3 -> 20:4 = #1 75 // CHECK-NEXT: File 2, 11:7 -> 11:13 = #1 76 // CHECK-NEXT: File 2, 11:15 -> 13:4 = #2 77 // CHECK-NEXT: File 2, 13:10 -> 15:4 = (#1 - #2) 78 // CHECK-NEXT: File 2, 16:7 -> 16:11 = #1 79 // CHECK-NEXT: File 2, 16:13 -> 18:4 = #3 80 // CHECK-NEXT: File 2, 18:10 -> 20:4 = (#1 - #3) 81 // CHECK-NEXT: File 3, 6:3 -> 7:4 = #1 82 // CHECK-NEXT: File 4, 3:24 -> 3:53 = #0 83 // CHECK-NEXT: File 4, 3:40 -> 3:45 = (#0 + #4) 84 // CHECK-NEXT: File 4, 3:47 -> 3:50 = #4 85 // CHECK-NEXT: File 4, 3:52 -> 3:53 = #4 86 // CHECK-NEXT: File 5, 10:3 -> 20:4 = #4 87 // CHECK-NEXT: File 5, 11:7 -> 11:13 = #4 88 // CHECK-NEXT: File 5, 11:15 -> 13:4 = #5 89 // CHECK-NEXT: File 5, 13:10 -> 15:4 = (#4 - #5) 90 // CHECK-NEXT: File 5, 16:7 -> 16:11 = #4 91 // CHECK-NEXT: File 5, 16:13 -> 18:4 = #6 92 // CHECK-NEXT: File 5, 18:10 -> 20:4 = (#4 - #6) 93 // CHECK-NEXT: File 6, 6:3 -> 7:4 = #4 94 // CHECK-NEXT: File 7, 3:24 -> 3:53 = #0 95 // CHECK-NEXT: File 7, 3:40 -> 3:45 = (#0 + #7) 96 // CHECK-NEXT: File 7, 3:47 -> 3:50 = #7 97 // CHECK-NEXT: File 7, 3:52 -> 3:53 = #7 98 // CHECK-NEXT: File 8, 6:3 -> 7:4 = #7 99 // CHECK-NEXT: File 9, 22:24 -> 22:37 = #0 100 // CHECK-NEXT: File 9, 22:31 -> 22:36 = (#0 + #8) 101 // CHECK-NEXT: File 10, 23:21 -> 23:24 = #8 102 // CHECK-NEXT: File 11, 22:24 -> 22:37 = #0 103 // CHECK-NEXT: File 11, 22:31 -> 22:36 = (#0 + #9) 104 // CHECK-NEXT: File 12, 23:21 -> 23:24 = #9 105 // CHECK-NEXT: File 13, 6:3 -> 7:4 = #9 106