173dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany// Check that UAR mode can handle very deep recusrion.
2cf2cabb752ffeff152ed471fa407a415c404d6e4Kostya Serebryany// export ASAN_OPTIONS=detect_stack_use_after_return=1
3cf2cabb752ffeff152ed471fa407a415c404d6e4Kostya Serebryany// RUN: %clangxx_asan -O2 %s -o %t && \
42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN:   %run %t 2>&1 | FileCheck %s
513521a267f509a06e92baa154947b9d2cde0eed8Kostya Serebryany// Also check that use_sigaltstack+verbosity doesn't crash.
62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: env ASAN_OPTIONS=verbosity=1:use_sigaltstack=1 %run %t  | FileCheck %s
773dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany#include <stdio.h>
873dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany
973dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany__attribute__((noinline))
1073dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryanyvoid RecursiveFunc(int depth, int *ptr) {
1173dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany  if ((depth % 1000) == 0)
1273dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany    printf("[%05d] ptr: %p\n", depth, ptr);
1373dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany  if (depth == 0)
1473dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany    return;
1573dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany  int local;
1673dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany  RecursiveFunc(depth - 1, &local);
1773dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany}
1873dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany
1973dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryanyint main(int argc, char **argv) {
2073dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany  RecursiveFunc(40000, 0);
2173dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany  return 0;
2273dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany}
2373dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany// CHECK: [40000] ptr:
2473dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany// CHECK: [20000] ptr:
2573dc36ea7dd04a2ea52ffae91670913731de209aKostya Serebryany// CHECK: [00000] ptr
26