forked from OSchip/llvm-project
58 lines
1.5 KiB
C++
58 lines
1.5 KiB
C++
// Test coverage_order_pcs=1 flag which orders the PCs by their appearance.
|
|
// RUN: DIR=%T/coverage-order-pcs
|
|
// RUN: rm -rf $DIR
|
|
// RUN: mkdir $DIR
|
|
// RUN: %clangxx_asan -fsanitize-coverage=func %s -o %t
|
|
// RUN: %env_asan_opts=coverage_dir=$DIR:coverage=1:coverage_order_pcs=0 %run %t
|
|
// RUN: mv $DIR/*sancov $DIR/A
|
|
|
|
// RUN: %env_asan_opts=coverage_dir=$DIR:coverage=1:coverage_order_pcs=0 %run %t 1
|
|
// RUN: mv $DIR/*sancov $DIR/B
|
|
|
|
// RUN: %env_asan_opts=coverage_dir=$DIR:coverage=1:coverage_order_pcs=1 %run %t
|
|
// RUN: mv $DIR/*sancov $DIR/C
|
|
|
|
// RUN: %env_asan_opts=coverage_dir=$DIR:coverage=1:coverage_order_pcs=1 %run %t 1
|
|
// RUN: mv $DIR/*sancov $DIR/D
|
|
//
|
|
// RUN: (%sancov print $DIR/A; %sancov print $DIR/B; %sancov print $DIR/C; %sancov print $DIR/D) | FileCheck %s
|
|
//
|
|
// RUN: rm -rf $DIR
|
|
// Ordering works only in 64-bit mode for now.
|
|
// REQUIRES: asan-64-bits
|
|
// UNSUPPORTED: android
|
|
#include <stdio.h>
|
|
|
|
void foo() { fprintf(stderr, "FOO\n"); }
|
|
void bar() { fprintf(stderr, "BAR\n"); }
|
|
|
|
int main(int argc, char **argv) {
|
|
if (argc == 2) {
|
|
foo();
|
|
bar();
|
|
} else {
|
|
bar();
|
|
foo();
|
|
}
|
|
}
|
|
|
|
// Run A: no ordering
|
|
// CHECK: [[FOO:0x[0-9a-f]*]]
|
|
// CHECK-NEXT: [[BAR:0x[0-9a-f]*]]
|
|
// CHECK-NEXT: [[MAIN:0x[0-9a-f]*]]
|
|
//
|
|
// Run B: still no ordering
|
|
// CHECK-NEXT: [[FOO]]
|
|
// CHECK-NEXT: [[BAR]]
|
|
// CHECK-NEXT: [[MAIN]]
|
|
//
|
|
// Run C: MAIN, BAR, FOO
|
|
// CHECK-NEXT: [[MAIN]]
|
|
// CHECK-NEXT: [[BAR]]
|
|
// CHECK-NEXT: [[FOO]]
|
|
//
|
|
// Run D: MAIN, FOO, BAR
|
|
// CHECK-NEXT: [[MAIN]]
|
|
// CHECK-NEXT: [[FOO]]
|
|
// CHECK-NEXT: [[BAR]]
|