1 // RUN: %strip_comments > %t.stripped.c
2 // RUN: %clang_cc1 -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name preprocessor.c %t.stripped.c | FileCheck %s
3 
4 // CHECK: func
5 void func() {    // CHECK: File 0, [[@LINE]]:13 -> [[@LINE+5]]:2 = #0
6   int i = 0;
7 #ifdef MACRO     // CHECK-NEXT: Skipped,File 0, [[@LINE]]:1 -> [[@LINE+2]]:7 = 0
8   int x = i;
9 #endif
10 }
11 
12                  // CHECK: main
13 int main() {     // CHECK-NEXT: File 0, [[@LINE]]:12 -> {{[0-9]+}}:2 = #0
14   int i = 0;
15 #if 0 // CHECK-NEXT: Skipped,File 0, [[@LINE]]:1 -> [[@LINE+4]]:9 = 0
16   if(i == 0) {
17     i = 1;
18   }
19 #  endif // Mark me skipped!
20 
21 #if 1
22                  // CHECK-NEXT: File 0, [[@LINE+1]]:6 -> [[@LINE+1]]:12 = #0
23   if(i == 0) {   // CHECK: File 0, [[@LINE]]:14 -> [[@LINE+2]]:4 = #1
24     i = 1;
25   }
26 #else            // CHECK-NEXT: Skipped,File 0, [[@LINE]]:1 -> [[@LINE+5]]:7 = 0
27   if(i == 1) {
28     i = 0;
29   }
30 }
31 #endif
32 
33   // CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+4]]:8
34 #\
35   if 0
36 #\
37   endif // also skipped
38 
39 #if 1
40   // CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+3]]:7
41 #\
42   elif 0
43 #endif
44 
45 #if 1
46   // CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+3]]:7
47 #\
48   else
49 #endif
50 
51   // CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+4]]:8
52 #\
53   ifdef NOT_DEFINED
54 #\
55   endif
56 
57   // CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+4]]:8
58 #\
59   ifndef __FILE__
60 #\
61   endif
62 
63   // CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+6]]:10
64 #\
65   ifdef NOT_DEFINED
66 #\
67   \
68    \
69     endif // also skipped
70 
71   return 0;
72 }
73