1 // RUN: %clang -S -emit-llvm --coverage %s -o %t
2 // RUN: FileCheck -check-prefix=ALL < %t %s
3 // RUN: %clang -S -emit-llvm --coverage -fprofile-exclude-files=".*\.h$" %s -o %t
4 // RUN: FileCheck -check-prefix=NO-HEADER < %t %s
5 // RUN: %clang -S -emit-llvm --coverage -fprofile-filter-files=".*\.c$" %s -o %t
6 // RUN: FileCheck -check-prefix=NO-HEADER < %t %s
7 // RUN: %clang -S -emit-llvm --coverage -fprofile-filter-files=".*\.c$;.*1\.h$" %s -o %t
8 // RUN: FileCheck -check-prefix=NO-HEADER2 < %t %s
9 // RUN: %clang -S -emit-llvm --coverage -fprofile-exclude-files=".*2\.h$;.*1\.h$" %s -o %t
10 // RUN: FileCheck -check-prefix=JUST-C < %t %s
11 // RUN: %clang -S -emit-llvm --coverage -fprofile-exclude-files=".*code\-coverage\-filter\.c$" %s -o %t
12 // RUN: FileCheck -check-prefix=HEADER < %t %s
13 // RUN: %clang -S -emit-llvm --coverage -fprofile-filter-files=".*\.c$" -fprofile-exclude-files=".*\.c$" %s -o %t
14 // RUN: FileCheck -check-prefix=NONE < %t %s
15 // RUN: %clang -S -emit-llvm --coverage -fprofile-filter-files=".*\.c$" -fprofile-exclude-files=".*\.h$" %s -o %t
16 // RUN: FileCheck -check-prefix=JUST-C < %t %s
17 
18 #include "Inputs/code-coverage-filter1.h"
19 #include "Inputs/code-coverage-filter2.h"
20 
test()21 void test() {
22   test1();
23   test2();
24 }
25 
26 // ALL: void @test1() #0 {{.*}}
27 // ALL: {{.*}}__llvm_gcov_ctr{{.*}}
28 // ALL: ret void
29 // ALL: void @test2() #0 {{.*}}
30 // ALL: {{.*}}__llvm_gcov_ctr{{.*}}
31 // ALL: ret void
32 // ALL: void @test() #0 {{.*}}
33 // ALL: {{.*}}__llvm_gcov_ctr{{.*}}
34 // ALL: ret void
35 
36 // NO-HEADER: void @test1() #0 {{.*}}
37 // NO-HEADER-NOT: {{.*}}__llvm_gcov_ctr{{.*}}
38 // NO-HEADER: ret void
39 // NO-HEADER: void @test2() #0 {{.*}}
40 // NO-HEADER-NOT: {{.*}}__llvm_gcov_ctr{{.*}}
41 // NO-HEADER: ret void
42 // NO-HEADER: void @test() #0 {{.*}}
43 // NO-HEADER: {{.*}}__llvm_gcov_ctr{{.*}}
44 // NO-HEADER: ret void
45 
46 // NO-HEADER2: void @test1() #0 {{.*}}
47 // NO-HEADER2: {{.*}}__llvm_gcov_ctr{{.*}}
48 // NO-HEADER2: ret void
49 // NO-HEADER2: void @test2() #0 {{.*}}
50 // NO-HEADER2-NOT: {{.*}}__llvm_gcov_ctr{{.*}}
51 // NO-HEADER2: ret void
52 // NO-HEADER2: void @test() #0 {{.*}}
53 // NO-HEADER2: {{.*}}__llvm_gcov_ctr{{.*}}
54 // NO-HEADER2: ret void
55 
56 // JUST-C: void @test1() #0 {{.*}}
57 // JUST-C-NOT: {{.*}}__llvm_gcov_ctr{{.*}}
58 // JUST-C: ret void
59 // JUST-C: void @test2() #0 {{.*}}
60 // JUST-C-NOT: {{.*}}__llvm_gcov_ctr{{.*}}
61 // JUST-C: ret void
62 // JUST-C: void @test() #0 {{.*}}
63 // JUST-C: {{.*}}__llvm_gcov_ctr{{.*}}
64 // JUST-C: ret void
65 
66 // HEADER: void @test1() #0 {{.*}}
67 // HEADER: {{.*}}__llvm_gcov_ctr{{.*}}
68 // HEADER: ret void
69 // HEADER: void @test2() #0 {{.*}}
70 // HEADER: {{.*}}__llvm_gcov_ctr{{.*}}
71 // HEADER: ret void
72 // HEADER: void @test() #0 {{.*}}
73 // HEADER-NOT: {{.*}}__llvm_gcov_ctr{{.*}}
74 // HEADER: ret void
75 
76 // NONE: void @test1() #0 {{.*}}
77 // NONE-NOT: {{.*}}__llvm_gcov_ctr{{.*}}
78 // NONE: ret void
79 // NONE: void @test2() #0 {{.*}}
80 // NONE-NOT: {{.*}}__llvm_gcov_ctr{{.*}}
81 // NONE: ret void
82 // NONE: void @test() #0 {{.*}}
83 // NONE-NOT: {{.*}}__llvm_gcov_ctr{{.*}}
84 // NONE: ret void
85