blob: 3f56354e44a731d7ae642f1c42301850a8d297b1 [file] [log] [blame]
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -07001// 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
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -07005// RUN: %clangxx_asan -fsanitize-coverage=func %s -o %t
6// RUN: env ASAN_OPTIONS=$ASAN_OPTIONS:coverage_dir=$DIR:coverage=1:coverage_order_pcs=0 %run %t
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -07007// RUN: mv $DIR/*sancov $DIR/A
8
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -07009// RUN: env ASAN_OPTIONS=$ASAN_OPTIONS:coverage_dir=$DIR:coverage=1:coverage_order_pcs=0 %run %t 1
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -070010// RUN: mv $DIR/*sancov $DIR/B
11
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -070012// RUN: env ASAN_OPTIONS=$ASAN_OPTIONS:coverage_dir=$DIR:coverage=1:coverage_order_pcs=1 %run %t
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -070013// RUN: mv $DIR/*sancov $DIR/C
14
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -070015// RUN: env ASAN_OPTIONS=$ASAN_OPTIONS:coverage_dir=$DIR:coverage=1:coverage_order_pcs=1 %run %t 1
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -070016// 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]]