blob: 0a26a80758c631acaa45a4b2b1fa8f2948b5ce61 [file] [log] [blame]
Stephen Hines2d1fdb22014-05-28 23:58:16 -07001// Check that UAR mode can handle very deep recusrion.
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -07002// RUN: export ASAN_OPTIONS=$ASAN_OPTIONS:detect_stack_use_after_return=1
Stephen Hines2d1fdb22014-05-28 23:58:16 -07003// RUN: %clangxx_asan -O2 %s -o %t && \
Stephen Hines6d186232014-11-26 17:56:19 -08004// RUN: (ulimit -s 4096; %run %t) 2>&1 | FileCheck %s
Stephen Hines86277eb2015-03-23 12:06:32 -07005
Stephen Hines2d1fdb22014-05-28 23:58:16 -07006// Also check that use_sigaltstack+verbosity doesn't crash.
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -07007// RUN: env ASAN_OPTIONS=$ASAN_OPTIONS:verbosity=1:use_sigaltstack=1 %run %t | FileCheck %s
Stephen Hines2d1fdb22014-05-28 23:58:16 -07008#include <stdio.h>
9
10__attribute__((noinline))
11void RecursiveFunc(int depth, int *ptr) {
12 if ((depth % 1000) == 0)
13 printf("[%05d] ptr: %p\n", depth, ptr);
14 if (depth == 0)
15 return;
16 int local;
17 RecursiveFunc(depth - 1, &local);
18}
19
20int main(int argc, char **argv) {
Stephen Hines6d186232014-11-26 17:56:19 -080021 RecursiveFunc(15000, 0);
Stephen Hines2d1fdb22014-05-28 23:58:16 -070022 return 0;
23}
Stephen Hines6d186232014-11-26 17:56:19 -080024// CHECK: [15000] ptr:
25// CHECK: [07000] ptr:
26// CHECK: [00000] ptr: