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 Bukaint 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