1 // Tests -fsanitize-coverage=stack-depth 2 // 3 // XFAIL: tsan 4 // 5 // RUN: %clangxx -O0 -std=c++11 -fsanitize-coverage=stack-depth %s -o %t 6 // RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not Assertion{{.*}}failed 7 // RUN: %clangxx -O0 -std=c++11 -fsanitize-coverage=trace-pc-guard,stack-depth \ 8 // RUN: %s -o %t 9 // RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not Assertion{{.*}}failed 10 11 #include <cstdint> 12 #include <cstdio> 13 #include <cassert> 14 15 thread_local uintptr_t __sancov_lowest_stack; 16 uintptr_t last_stack; 17 18 void foo(int recurse) { 19 assert(__sancov_lowest_stack < last_stack); 20 last_stack = __sancov_lowest_stack; 21 if (recurse <= 0) return; 22 foo(recurse - 1); 23 } 24 25 int main() { 26 last_stack = __sancov_lowest_stack; 27 foo(100); 28 printf("Success!\n"); 29 return 0; 30 } 31 32 // CHECK: Success! 33