1// Check that UAR mode can handle very deep recusrion.
2// export ASAN_OPTIONS=detect_stack_use_after_return=1
3// RUN: %clangxx_asan -O2 %s -o %t && \
4// RUN:   %run %t 2>&1 | FileCheck %s
5// Also check that use_sigaltstack+verbosity doesn't crash.
6// RUN: env ASAN_OPTIONS=verbosity=1:use_sigaltstack=1 %run %t  | FileCheck %s
7#include <stdio.h>
8
9__attribute__((noinline))
10void RecursiveFunc(int depth, int *ptr) {
11  if ((depth % 1000) == 0)
12    printf("[%05d] ptr: %p\n", depth, ptr);
13  if (depth == 0)
14    return;
15  int local;
16  RecursiveFunc(depth - 1, &local);
17}
18
19int main(int argc, char **argv) {
20  RecursiveFunc(40000, 0);
21  return 0;
22}
23// CHECK: [40000] ptr:
24// CHECK: [20000] ptr:
25// CHECK: [00000] ptr
26