1c3334dadSChris Apple // RUN: %clangxx -fsanitize=realtime %s -o %t 29e06e772SChris Apple // RUN: %env_rtsan_opts="halt_on_error=false,print_stats_on_exit=true" %run %t 2>&1 | FileCheck %s 39e06e772SChris Apple // RUN: %env_rtsan_opts="halt_on_error=true,print_stats_on_exit=true" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-HALT 4*8f8d5f00SChris Apple // RUN: %env_rtsan_opts="suppressions=%s.supp,print_stats_on_exit=true" not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-SUPPRESSIONS 5c3334dadSChris Apple 6c3334dadSChris Apple // UNSUPPORTED: ios 7c3334dadSChris Apple 8c3334dadSChris Apple // Intent: Ensure exits stats are printed on exit. 9c3334dadSChris Apple 10c3334dadSChris Apple #include <unistd.h> 11c3334dadSChris Apple 12c3334dadSChris Apple void violation() [[clang::nonblocking]] { 13c3334dadSChris Apple const int kNumViolations = 10; 14c3334dadSChris Apple for (int i = 0; i < kNumViolations; i++) { 15c3334dadSChris Apple usleep(1); 16c3334dadSChris Apple } 17c3334dadSChris Apple } 18c3334dadSChris Apple 19c3334dadSChris Apple int main() { 20c3334dadSChris Apple violation(); 21c3334dadSChris Apple return 0; 22c3334dadSChris Apple } 23c3334dadSChris Apple 24c3334dadSChris Apple // CHECK: RealtimeSanitizer exit stats: 25c3334dadSChris Apple // CHECK-NEXT: Total error count: 10 26f5b95db4SChris Apple // CHECK-NEXT: Unique error count: 1 27*8f8d5f00SChris Apple // CHECK-NOT: Suppression count 289e06e772SChris Apple 299e06e772SChris Apple // CHECK-HALT: RealtimeSanitizer exit stats: 309e06e772SChris Apple // CHECK-HALT-NEXT: Total error count: 1 319e06e772SChris Apple // CHECK-HALT-NEXT: Unique error count: 1 32*8f8d5f00SChris Apple // CHECK-HALT-NOT: Suppression count 33*8f8d5f00SChris Apple 34*8f8d5f00SChris Apple // We pass in intentionally_non_existant_function in the suppressions file 35*8f8d5f00SChris Apple // This is just to ensure we only get the "Suppression count" metric if this 36*8f8d5f00SChris Apple // file is passed at runtime, otherwise that statistic is omitted 37*8f8d5f00SChris Apple // CHECK-SUPPRESSIONS: RealtimeSanitizer exit stats: 38*8f8d5f00SChris Apple // CHECK-SUPPRESSIONS-NEXT: Total error count: 1 39*8f8d5f00SChris Apple // CHECK-SUPPRESSIONS-NEXT: Unique error count: 1 40*8f8d5f00SChris Apple // CHECK-SUPPRESSIONS-NEXT: Suppression count: 0 41