| // 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]] |