1 // RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard -DSHARED %s -shared -o %dynamiclib -fPIC %ld_flags_rpath_so
2 // RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard %s %ld_flags_rpath_exe -o %t
3 // RUN: rm -rf %t-dir && mkdir -p %t-dir && cd %t-dir
4 // RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 2>&1 | FileCheck %s
5 //
6 // UNSUPPORTED: ios
7 
8 // XFAIL: i386-netbsd
9 
10 #include <stdio.h>
11 
12 #include <sanitizer/coverage_interface.h>
13 
14 #ifdef SHARED
15 void bar1() { printf("bar1\n"); }
16 void bar2() { printf("bar2\n"); }
17 #else
18 __attribute__((noinline)) void foo1() { printf("foo1\n"); }
19 __attribute__((noinline)) void foo2() { printf("foo2\n"); }
20 void bar1();
21 void bar2();
22 
23 int main(int argc, char **argv) {
24   fprintf(stderr, "RESET\n");
25   __sanitizer_cov_reset();
26   foo1();
27   foo2();
28   bar1();
29   bar2();
30   __sanitizer_cov_dump();
31 // CHECK: RESET
32 // CHECK-DAG: SanitizerCoverage: ./coverage-reset.cpp{{.*}}.sancov: 2 PCs written
33 // CHECK-DAG: SanitizerCoverage: ./libcoverage-reset.cpp{{.*}}.sancov: 2 PCs written
34 
35   fprintf(stderr, "RESET\n");
36   __sanitizer_cov_reset();
37   foo1();
38   bar1();
39   __sanitizer_cov_dump();
40 // CHECK: RESET
41 // CHECK-DAG: SanitizerCoverage: ./coverage-reset.cpp{{.*}}.sancov: 1 PCs written
42 // CHECK-DAG: SanitizerCoverage: ./libcoverage-reset.cpp{{.*}}.sancov: 1 PCs written
43 
44   fprintf(stderr, "RESET\n");
45   __sanitizer_cov_reset();
46   foo1();
47   foo2();
48   __sanitizer_cov_dump();
49 // CHECK: RESET
50 // CHECK: SanitizerCoverage: ./coverage-reset.cpp{{.*}}.sancov: 2 PCs written
51 
52   fprintf(stderr, "RESET\n");
53   __sanitizer_cov_reset();
54   bar1();
55   bar2();
56   __sanitizer_cov_dump();
57 // CHECK: RESET
58 // CHECK: SanitizerCoverage: ./libcoverage-reset.cpp{{.*}}.sancov: 2 PCs written
59 
60   fprintf(stderr, "RESET\n");
61   __sanitizer_cov_reset();
62 // CHECK: RESET
63 
64   bar2();
65 // CHECK: SanitizerCoverage: ./libcoverage-reset.cpp{{.*}}.sancov: 1 PCs written
66 }
67 #endif
68