1 | /// Test that destructors and destructors whose priorities are greater than 100 are tracked. |
2 | // RUN: mkdir -p %t.dir && cd %t.dir |
3 | // RUN: %clang --coverage %s -o %t -dumpdir ./ |
4 | // RUN: rm -f gcov-destructor.gcda && %run %t |
5 | // RUN: llvm-cov gcov -t gcov-destructor.gcda | FileCheck %s |
6 | // UNSUPPORTED: darwin |
7 | |
8 | #include <unistd.h> |
9 | |
10 | void before_exec() {} // CHECK: 1: [[#@LINE]]:void before_exec |
11 | void after_exec() {} // CHECK-NEXT: 1: [[#@LINE]]:void after_exec |
12 | |
13 | __attribute__((constructor)) // CHECK: -: [[#@LINE]]:__attribute__ |
14 | void constructor() {} // CHECK-NEXT: 1: [[#@LINE]]: |
15 | |
16 | /// Runs before __llvm_gcov_writeout. |
17 | __attribute__((destructor)) // CHECK: -: [[#@LINE]]:__attribute__ |
18 | void destructor() {} // CHECK-NEXT: 1: [[#@LINE]]: |
19 | |
20 | __attribute__((destructor(101))) // CHECK: -: [[#@LINE]]:__attribute__ |
21 | void destructor_101() {} // CHECK-NEXT: 1: [[#@LINE]]: |
22 | |
23 | /// Runs after __llvm_gcov_writeout. |
24 | __attribute__((destructor(99))) // CHECK: -: [[#@LINE]]:__attribute__ |
25 | void destructor_99() {} // CHECK-NEXT: #####: [[#@LINE]]: |
26 | |
27 | int main() { |
28 | before_exec(); |
29 | // Implicit writeout. |
30 | execl(path: "/not_exist" , arg: "not_exist" , (char *)0); |
31 | // Still tracked. |
32 | after_exec(); |
33 | return 0; |
34 | } |
35 | |