1673dc3d4SNico Weber // RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard %s -o %t 2673dc3d4SNico Weber // RUN: rm -rf %t-dir 3673dc3d4SNico Weber // RUN: mkdir -p %t-dir && cd %t-dir 4673dc3d4SNico Weber // RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 2>&1 | FileCheck %s 5673dc3d4SNico Weber // 6673dc3d4SNico Weber // UNSUPPORTED: android 7b0567be2SJulian Lettner // UNSUPPORTED: iossim 8673dc3d4SNico Weber // 9673dc3d4SNico Weber // Ideally a forked-subprocess should only report it's own coverage, 10673dc3d4SNico Weber // not parent's one. But trace-pc-guard currently does nothing special for fork, 11673dc3d4SNico Weber // and thus this test is relaxed. 12673dc3d4SNico Weber 13673dc3d4SNico Weber #include <stdio.h> 14673dc3d4SNico Weber #include <string.h> 15*d2dad628SRoy Sundahl #include <sys/wait.h> 16673dc3d4SNico Weber #include <unistd.h> 17673dc3d4SNico Weber 18673dc3d4SNico Weber __attribute__((noinline)) foo()19673dc3d4SNico Webervoid foo() { printf("foo\n"); } 20673dc3d4SNico Weber 21673dc3d4SNico Weber __attribute__((noinline)) bar()22673dc3d4SNico Webervoid bar() { printf("bar\n"); } 23673dc3d4SNico Weber 24673dc3d4SNico Weber __attribute__((noinline)) baz()25673dc3d4SNico Webervoid baz() { printf("baz\n"); } 26673dc3d4SNico Weber main(int argc,char ** argv)27673dc3d4SNico Weberint main(int argc, char **argv) { 28673dc3d4SNico Weber pid_t child_pid = fork(); 29673dc3d4SNico Weber if (child_pid == 0) { 30673dc3d4SNico Weber fprintf(stderr, "Child PID: %d\n", getpid()); 31673dc3d4SNico Weber baz(); 32673dc3d4SNico Weber } else { 33673dc3d4SNico Weber fprintf(stderr, "Parent PID: %d\n", getpid()); 34673dc3d4SNico Weber foo(); 35673dc3d4SNico Weber bar(); 36*d2dad628SRoy Sundahl 37*d2dad628SRoy Sundahl // Wait for the child process(s) to finish 38*d2dad628SRoy Sundahl while (wait(NULL) > 0) 39*d2dad628SRoy Sundahl ; 40673dc3d4SNico Weber } 41673dc3d4SNico Weber return 0; 42673dc3d4SNico Weber } 43673dc3d4SNico Weber 44673dc3d4SNico Weber // CHECK-DAG: Child PID: [[ChildPID:[0-9]+]] 45673dc3d4SNico Weber // CHECK-DAG: [[ChildPID]].sancov: {{.*}} PCs written 46673dc3d4SNico Weber // CHECK-DAG: Parent PID: [[ParentPID:[0-9]+]] 47673dc3d4SNico Weber // CHECK-DAG: [[ParentPID]].sancov: 3 PCs written 48