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
25void foo() { fprintf(stderr, "FOO\n"); }
26void bar() { fprintf(stderr, "BAR\n"); }
27
28int 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