diff options
Diffstat (limited to 'test/profile/runtime_infinite.c')
-rw-r--r-- | test/profile/runtime_infinite.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/test/profile/runtime_infinite.c b/test/profile/runtime_infinite.c new file mode 100644 index 000000000..b55f5e275 --- /dev/null +++ b/test/profile/runtime_infinite.c @@ -0,0 +1,36 @@ +// The waiting loop never exits via the normal +// path before the profile is dumped and the +// program is terminated. This tests checks +// that the entry of main is properly instrumented +// and has non-zero count. + +// RUN: %clang_pgogen -mllvm -do-counter-promotion=false -O2 -o %t %s +// RUN: env LLVM_PROFILE_FILE=%t.profraw %run %t +// RUN: llvm-profdata show -function main -counts %t.profraw| FileCheck %s +void exit(int); + +int __llvm_profile_dump(void); +void __llvm_profile_reset_counters(void); + +int g = 0; +__attribute__((noinline)) void doSth() { + g++; + + if (g > 10000) { + // dump profile and exit; + __llvm_profile_dump(); + exit(0); + } +} +int errorcode = 0; +int noerror() { return (errorcode == 0); } + +int main(int argc, const char *argv[]) { + // waiting_loop + while (noerror()) { + doSth(); + } +} + +// CHECK-LABEL: main +// CHECK: [10001, 1] |