/// Test that destructors and destructors whose priorities are greater than 100 are tracked. // RUN: mkdir -p %t.dir && cd %t.dir // RUN: %clang --coverage %s -o %t // RUN: rm -f gcov-destructor.gcda && %run %t // RUN: llvm-cov gcov -t gcov-destructor.gcda | FileCheck %s // UNSUPPORTED: darwin #include void before_exec() {} // CHECK: 1: [[#@LINE]]:void before_exec void after_exec() {} // CHECK-NEXT: 1: [[#@LINE]]:void after_exec __attribute__((constructor)) // CHECK: -: [[#@LINE]]:__attribute__ void constructor() {} // CHECK-NEXT: 1: [[#@LINE]]: /// Runs before __llvm_gcov_writeout. __attribute__((destructor)) // CHECK: -: [[#@LINE]]:__attribute__ void destructor() {} // CHECK-NEXT: 1: [[#@LINE]]: __attribute__((destructor(101))) // CHECK: -: [[#@LINE]]:__attribute__ void destructor_101() {} // CHECK-NEXT: 1: [[#@LINE]]: /// Runs after __llvm_gcov_writeout. __attribute__((destructor(99))) // CHECK: -: [[#@LINE]]:__attribute__ void destructor_99() {} // CHECK-NEXT: #####: [[#@LINE]]: int main() { before_exec(); // Implicit writeout. execl("/not_exist", "not_exist", (char *)0); // Still tracked. after_exec(); return 0; }