• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Test coverage_order_pcs=1 flag which orders the PCs by their appearance.
2 // RUN: DIR=%T/coverage-order-pcs
3 // RUN: rm -rf $DIR
4 // RUN: mkdir $DIR
5 // RUN: %clangxx_asan -fsanitize-coverage=1 %s -o %t
6 // RUN: ASAN_OPTIONS=coverage_dir=$DIR:coverage=1:coverage_order_pcs=0 %run %t
7 // RUN: mv $DIR/*sancov $DIR/A
8 
9 // RUN: ASAN_OPTIONS=coverage_dir=$DIR:coverage=1:coverage_order_pcs=0 %run %t 1
10 // RUN: mv $DIR/*sancov $DIR/B
11 
12 // RUN: ASAN_OPTIONS=coverage_dir=$DIR:coverage=1:coverage_order_pcs=1 %run %t
13 // RUN: mv $DIR/*sancov $DIR/C
14 
15 // RUN: ASAN_OPTIONS=coverage_dir=$DIR:coverage=1:coverage_order_pcs=1 %run %t 1
16 // RUN: mv $DIR/*sancov $DIR/D
17 //
18 // RUN: (%sancov print $DIR/A; %sancov print $DIR/B; %sancov print $DIR/C; %sancov print $DIR/D) | FileCheck %s
19 //
20 // RUN: rm -rf $DIR
21 // Ordering works only in 64-bit mode for now.
22 // REQUIRES: asan-64-bits
23 #include <stdio.h>
24 
foo()25 void foo() { fprintf(stderr, "FOO\n"); }
bar()26 void bar() { fprintf(stderr, "BAR\n"); }
27 
main(int argc,char ** argv)28 int main(int argc, char **argv) {
29   if (argc == 2) {
30     foo();
31     bar();
32   } else {
33     bar();
34     foo();
35   }
36 }
37 
38 // Run A: no ordering
39 // CHECK: [[FOO:0x[0-9a-f]*]]
40 // CHECK-NEXT: [[BAR:0x[0-9a-f]*]]
41 // CHECK-NEXT: [[MAIN:0x[0-9a-f]*]]
42 //
43 // Run B: still no ordering
44 // CHECK-NEXT: [[FOO]]
45 // CHECK-NEXT: [[BAR]]
46 // CHECK-NEXT: [[MAIN]]
47 //
48 // Run C: MAIN, BAR, FOO
49 // CHECK-NEXT: [[MAIN]]
50 // CHECK-NEXT: [[BAR]]
51 // CHECK-NEXT: [[FOO]]
52 //
53 // Run D: MAIN, FOO, BAR
54 // CHECK-NEXT: [[MAIN]]
55 // CHECK-NEXT: [[FOO]]
56 // CHECK-NEXT: [[BAR]]
57