xref: /aosp_15_r20/external/compiler-rt/test/asan/TestCases/coverage-levels.cc (revision 7c3d14c8b49c529e04be81a3ce6f5cc23712e4c6)
1*7c3d14c8STreehugger Robot // Test various levels of coverage
2*7c3d14c8STreehugger Robot //
3*7c3d14c8STreehugger Robot // RUN: %clangxx_asan -O1 -fsanitize-coverage=func  %s -o %t
4*7c3d14c8STreehugger Robot // RUN: %env_asan_opts=coverage=1:coverage_bitset=1:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1
5*7c3d14c8STreehugger Robot // RUN: %clangxx_asan -O1 -fsanitize-coverage=bb  %s -o %t
6*7c3d14c8STreehugger Robot // RUN: %env_asan_opts=coverage=1:coverage_bitset=1:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2
7*7c3d14c8STreehugger Robot // RUN: %clangxx_asan -O1 -fsanitize-coverage=edge  %s -o %t
8*7c3d14c8STreehugger Robot // RUN: %env_asan_opts=coverage=1:coverage_bitset=1:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3
9*7c3d14c8STreehugger Robot // RUN: %clangxx_asan -O1 -fsanitize-coverage=edge -mllvm -sanitizer-coverage-block-threshold=0 %s -o %t
10*7c3d14c8STreehugger Robot // RUN: %env_asan_opts=coverage=1:coverage_bitset=1:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3
11*7c3d14c8STreehugger Robot // RUN: %clangxx_asan -O1 -fsanitize-coverage=edge,8bit-counters %s -o %t
12*7c3d14c8STreehugger Robot // RUN: %env_asan_opts=coverage=1:coverage_counters=1:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK_COUNTERS
13*7c3d14c8STreehugger Robot 
14*7c3d14c8STreehugger Robot // RUN: %env_asan_opts=coverage=1:coverage_bitset=0:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3_NOBITSET
15*7c3d14c8STreehugger Robot // RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3_NOBITSET
16*7c3d14c8STreehugger Robot // RUN: %env_asan_opts=coverage=1:coverage_pcs=0:verbosity=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3_NOPCS
17*7c3d14c8STreehugger Robot //
18*7c3d14c8STreehugger Robot // REQUIRES: asan-64-bits
19*7c3d14c8STreehugger Robot // UNSUPPORTED: android
20*7c3d14c8STreehugger Robot volatile int sink;
main(int argc,char ** argv)21*7c3d14c8STreehugger Robot int main(int argc, char **argv) {
22*7c3d14c8STreehugger Robot   if (argc == 0)
23*7c3d14c8STreehugger Robot     sink = 0;
24*7c3d14c8STreehugger Robot }
25*7c3d14c8STreehugger Robot 
26*7c3d14c8STreehugger Robot // CHECK1: CovDump: bitset of 1 bits written for '{{.*}}', 1 bits are set
27*7c3d14c8STreehugger Robot // CHECK1:  1 PCs written
28*7c3d14c8STreehugger Robot // CHECK2: CovDump: bitset of 2 bits written for '{{.*}}', 1 bits are set
29*7c3d14c8STreehugger Robot // CHECK2:  1 PCs written
30*7c3d14c8STreehugger Robot // CHECK3: CovDump: bitset of 3 bits written for '{{.*}}', 2 bits are set
31*7c3d14c8STreehugger Robot // CHECK3:  2 PCs written
32*7c3d14c8STreehugger Robot // CHECK3_NOBITSET-NOT: bitset of
33*7c3d14c8STreehugger Robot // CHECK3_NOPCS-NOT: PCs written
34*7c3d14c8STreehugger Robot // CHECK_COUNTERS: CovDump: 3 counters written for
35