1 | /// A basic block with fork/exec* is split. .gcda is flushed immediately before |
2 | /// fork/exec* so the lines before fork are counted once while succeeding |
3 | /// lines are counted twice. |
4 | // RUN: mkdir -p %t.d && cd %t.d |
5 | // RUN: %clang --coverage %s -o %t -dumpdir ./ |
6 | // RUN: test -f gcov-fork.gcno |
7 | |
8 | // RUN: rm -f gcov-fork.gcda && %run %t |
9 | // RUN: llvm-cov gcov -t gcov-fork.gcda | FileCheck %s |
10 | |
11 | #include <sys/wait.h> |
12 | #include <unistd.h> |
13 | |
14 | void func1() {} // CHECK: 1: [[#@LINE]]:void func1() |
15 | void func2() {} // CHECK-NEXT: 2: [[#@LINE]]: |
16 | int main(void) { // CHECK-NEXT: 1: [[#@LINE]]: |
17 | int status; // CHECK-NEXT: -: [[#@LINE]]: |
18 | func1(); // CHECK-NEXT: 1: [[#@LINE]]: |
19 | pid_t pid = fork(); // CHECK-NEXT: 1: [[#@LINE]]: |
20 | if (pid == -1) return 1; // CHECK-NEXT: 1: [[#@LINE]]: |
21 | if (pid) // CHECK-NEXT: 2: [[#@LINE]]: |
22 | wait(stat_loc: &status); // CHECK-NEXT: 1: [[#@LINE]]: |
23 | func2(); // CHECK-NEXT: 2: [[#@LINE]]: |
24 | return 0; // CHECK-NEXT: 2: [[#@LINE]]: |
25 | } |
26 | |