17185b1f4SVitaly Buka // RUN: %clangxx %s -fsanitize-memory-track-origins=1 -o %t
27185b1f4SVitaly Buka // 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"
3fa24c4a1SVitaly Buka // RUN: %env_tool_opts="compress_stack_depot=-1:malloc_context_size=128:verbosity=1" %run %t 2>&1 | FileCheck %s --check-prefixes=COMPRESS
4fa24c4a1SVitaly Buka // RUN: %env_tool_opts="compress_stack_depot=-2:malloc_context_size=128:verbosity=1" %run %t 2>&1 | FileCheck %s --check-prefixes=COMPRESS
5fa24c4a1SVitaly Buka // RUN: %env_tool_opts="compress_stack_depot=1:malloc_context_size=128:verbosity=1" %run %t 2>&1 | FileCheck %s --check-prefixes=COMPRESS,THREAD
6fa24c4a1SVitaly Buka // RUN: %env_tool_opts="compress_stack_depot=2:malloc_context_size=128:verbosity=1" %run %t 2>&1 | FileCheck %s --check-prefixes=COMPRESS,THREAD
77185b1f4SVitaly Buka 
87185b1f4SVitaly Buka // Ubsan does not store stacks.
97185b1f4SVitaly Buka // UNSUPPORTED: ubsan
107185b1f4SVitaly Buka 
117185b1f4SVitaly Buka // FIXME: Fails for unknown reason.
127185b1f4SVitaly Buka // UNSUPPORTED: s390x
137185b1f4SVitaly Buka 
14*75504789SVitaly Buka // Similar to D114934, something is broken with background thread on THUMB and Asan.
15*75504789SVitaly Buka // XFAIL: thumb && asan
16*75504789SVitaly Buka 
17fa24c4a1SVitaly Buka #include <sanitizer/common_interface_defs.h>
18fa24c4a1SVitaly Buka 
197185b1f4SVitaly Buka #include <memory>
207185b1f4SVitaly Buka 
217185b1f4SVitaly Buka __attribute__((noinline)) void a(unsigned v);
227185b1f4SVitaly Buka __attribute__((noinline)) void b(unsigned v);
237185b1f4SVitaly Buka 
247185b1f4SVitaly Buka std::unique_ptr<int[]> p;
257185b1f4SVitaly Buka 
a(unsigned v)267185b1f4SVitaly Buka __attribute__((noinline)) void a(unsigned v) {
277185b1f4SVitaly Buka   int x;
287185b1f4SVitaly Buka   v >>= 1;
297185b1f4SVitaly Buka   if (!v) {
307185b1f4SVitaly Buka     p.reset(new int[100]);
317185b1f4SVitaly Buka     p[1] = x;
327185b1f4SVitaly Buka     return;
337185b1f4SVitaly Buka   }
347185b1f4SVitaly Buka   if (v & 1)
357185b1f4SVitaly Buka     b(v);
367185b1f4SVitaly Buka   else
377185b1f4SVitaly Buka     a(v);
387185b1f4SVitaly Buka }
397185b1f4SVitaly Buka 
b(unsigned v)407185b1f4SVitaly Buka __attribute__((noinline)) void b(unsigned v) { return a(v); }
417185b1f4SVitaly Buka 
main(int argc,char * argv[])427185b1f4SVitaly Buka int main(int argc, char *argv[]) {
437185b1f4SVitaly Buka   for (unsigned i = 0; i < 100000; ++i)
447185b1f4SVitaly Buka     a(i + (i << 16));
45fa24c4a1SVitaly Buka 
46fa24c4a1SVitaly Buka   __sanitizer_sandbox_arguments args = {0};
47fa24c4a1SVitaly Buka   __sanitizer_sandbox_on_notify(&args);
48fa24c4a1SVitaly Buka 
497185b1f4SVitaly Buka   return 0;
507185b1f4SVitaly Buka }
517185b1f4SVitaly Buka 
52fa24c4a1SVitaly Buka // THREAD: StackDepot compression thread started
537185b1f4SVitaly Buka // COMPRESS: StackDepot released {{[0-9]+}}
54fa24c4a1SVitaly Buka // THREAD: StackDepot compression thread stopped
55