1 | // RUN: %clangxx %s -fsanitize-memory-track-origins=1 -o %t |
2 | // RUN: %env_tool_opts="compress_stack_depot=0:malloc_context_size=128:verbosity=1" %run %t 2>&1 | FileCheck %s --implicit-check-not="StackDepot released" |
3 | // RUN: %env_tool_opts="compress_stack_depot=-1:malloc_context_size=128:verbosity=1" %run %t 2>&1 | FileCheck %s --check-prefixes=COMPRESS |
4 | // RUN: %env_tool_opts="compress_stack_depot=-2:malloc_context_size=128:verbosity=1" %run %t 2>&1 | FileCheck %s --check-prefixes=COMPRESS |
5 | // RUN: %env_tool_opts="compress_stack_depot=1:malloc_context_size=128:verbosity=1" %run %t 2>&1 | FileCheck %s --check-prefixes=COMPRESS,THREAD |
6 | // RUN: %env_tool_opts="compress_stack_depot=2:malloc_context_size=128:verbosity=1" %run %t 2>&1 | FileCheck %s --check-prefixes=COMPRESS,THREAD |
7 | |
8 | // Ubsan does not store stacks. |
9 | // UNSUPPORTED: ubsan |
10 | |
11 | // FIXME: Fails for unknown reason. |
12 | // UNSUPPORTED: target=s390x{{.*}} |
13 | |
14 | // Similar to D114934, something is broken with background thread on THUMB and Asan. |
15 | // XFAIL: target=thumb{{.*}} && asan |
16 | |
17 | #include <sanitizer/common_interface_defs.h> |
18 | |
19 | #include <memory> |
20 | |
21 | __attribute__((noinline)) void a(unsigned v); |
22 | __attribute__((noinline)) void b(unsigned v); |
23 | |
24 | std::unique_ptr<int[]> p; |
25 | |
26 | __attribute__((noinline)) void a(unsigned v) { |
27 | int x; |
28 | v >>= 1; |
29 | if (!v) { |
30 | p.reset(new int[100]); |
31 | p[1] = x; |
32 | return; |
33 | } |
34 | if (v & 1) |
35 | b(v); |
36 | else |
37 | a(v); |
38 | } |
39 | |
40 | __attribute__((noinline)) void b(unsigned v) { return a(v); } |
41 | |
42 | int main(int argc, char *argv[]) { |
43 | for (unsigned i = 0; i < 100000; ++i) |
44 | a(v: i + (i << 16)); |
45 | |
46 | __sanitizer_sandbox_arguments args = {.coverage_sandboxed: 0}; |
47 | __sanitizer_sandbox_on_notify(args: &args); |
48 | |
49 | return 0; |
50 | } |
51 | |
52 | // THREAD: StackDepot compression thread started |
53 | // COMPRESS: StackDepot released {{[0-9]+}} |
54 | // THREAD: StackDepot compression thread stopped |
55 | |