blob: 18ba563dbd21ffe369b8d9bfe7c0b3ac01e2b4ab [file] [log] [blame]
Stephen Hines2d1fdb22014-05-28 23:58:16 -07001// Check that UAR mode can handle very deep recusrion.
Stephen Hines2d1fdb22014-05-28 23:58:16 -07002// RUN: %clangxx_asan -O2 %s -o %t && \
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -08003// RUN: (ulimit -s 4096; %env_asan_opts=detect_stack_use_after_return=1 %run %t) 2>&1 | FileCheck %s
Stephen Hines86277eb2015-03-23 12:06:32 -07004
Stephen Hines2d1fdb22014-05-28 23:58:16 -07005// Also check that use_sigaltstack+verbosity doesn't crash.
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -08006// RUN: %env_asan_opts=verbosity=1:use_sigaltstack=1:detect_stack_use_after_return=1 %run %t | FileCheck %s
Stephen Hines2d1fdb22014-05-28 23:58:16 -07007#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) {
Stephen Hines6d186232014-11-26 17:56:19 -080020 RecursiveFunc(15000, 0);
Stephen Hines2d1fdb22014-05-28 23:58:16 -070021 return 0;
22}
Stephen Hines6d186232014-11-26 17:56:19 -080023// CHECK: [15000] ptr:
24// CHECK: [07000] ptr:
25// CHECK: [00000] ptr: