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