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