diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:18:27 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:18:27 +0000 |
commit | 316d58822dada9440bd06ecfc758dcc2364d617c (patch) | |
tree | fe72ec2e6ce9a360dda74d9d57f7acdb0e3c39d6 /test/lsan | |
parent | 0230fcf22fe7d19f03d981c9c2c59a3db0b72ea5 (diff) | |
download | src-316d58822dada9440bd06ecfc758dcc2364d617c.tar.gz src-316d58822dada9440bd06ecfc758dcc2364d617c.zip |
Vendor import of compiler-rt trunk r290819:vendor/compiler-rt/compiler-rt-trunk-r290819
Notes
Notes:
svn path=/vendor/compiler-rt/dist/; revision=311120
svn path=/vendor/compiler-rt/compiler-rt-trunk-r290819/; revision=311121; tag=vendor/compiler-rt/compiler-rt-trunk-r290819
Diffstat (limited to 'test/lsan')
20 files changed, 73 insertions, 50 deletions
diff --git a/test/lsan/CMakeLists.txt b/test/lsan/CMakeLists.txt index e3d363a1f275..3324928ddb1c 100644 --- a/test/lsan/CMakeLists.txt +++ b/test/lsan/CMakeLists.txt @@ -10,16 +10,7 @@ endif() foreach(arch ${LSAN_TEST_ARCH}) set(LSAN_TEST_TARGET_ARCH ${arch}) string(TOLOWER "-${arch}" LSAN_TEST_CONFIG_SUFFIX) - if(ANDROID OR ${arch} MATCHES "arm|aarch64") - # This is only true if we are cross-compiling. - # Build all tests with host compiler and use host tools. - set(LSAN_TEST_TARGET_CC ${COMPILER_RT_TEST_COMPILER}) - set(LSAN_TEST_TARGET_CFLAGS ${COMPILER_RT_TEST_COMPILER_CFLAGS}) - else() - get_target_flags_for_arch(${arch} LSAN_TEST_TARGET_CFLAGS) - string(REPLACE ";" " " LSAN_TEST_TARGET_CFLAGS "${LSAN_TEST_TARGET_CFLAGS}") - endif() - + get_test_cc_for_arch(${arch} LSAN_TEST_TARGET_CC LSAN_TEST_TARGET_CFLAGS) string(TOUPPER ${arch} ARCH_UPPER_CASE) set(LSAN_LIT_TEST_MODE "Standalone") set(CONFIG_NAME ${ARCH_UPPER_CASE}LsanConfig) diff --git a/test/lsan/TestCases/cleanup_in_tsd_destructor.c b/test/lsan/TestCases/cleanup_in_tsd_destructor.c index debf05c20473..6da759563451 100644 --- a/test/lsan/TestCases/cleanup_in_tsd_destructor.c +++ b/test/lsan/TestCases/cleanup_in_tsd_destructor.c @@ -14,6 +14,7 @@ #include <stdlib.h> #include "sanitizer/lsan_interface.h" +#include "sanitizer_common/print_address.h" pthread_key_t key; __thread void *p; @@ -25,7 +26,7 @@ void key_destructor(void *arg) { void *thread_func(void *arg) { p = malloc(1337); - fprintf(stderr, "Test alloc: %p.\n", p); + print_address("Test alloc: ", 1, p); int res = pthread_setspecific(key, (void*)1); assert(res == 0); return 0; @@ -41,5 +42,5 @@ int main() { assert(res == 0); return 0; } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: [[ADDR]] (1337 bytes) diff --git a/test/lsan/TestCases/guard-page.c b/test/lsan/TestCases/guard-page.c index 5c70a9f08aca..25d63e2720c3 100644 --- a/test/lsan/TestCases/guard-page.c +++ b/test/lsan/TestCases/guard-page.c @@ -22,6 +22,7 @@ static void die(const char* msg, int err) { static void ctxfunc() { pthread_mutex_lock(&mutex); ctxfunc_started = 1; + // printf("ctxfunc\n"); pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); // Leave this context alive when the program exits. @@ -35,11 +36,11 @@ static void* thread(void* arg) { if (getcontext(&ctx) < 0) die("getcontext", 0); - stack = malloc(1 << 10); + stack = malloc(1 << 11); if (stack == NULL) die("malloc", 0); ctx.uc_stack.ss_sp = stack; - ctx.uc_stack.ss_size = 1 << 10; + ctx.uc_stack.ss_size = 1 << 11; makecontext(&ctx, ctxfunc, 0); setcontext(&ctx); die("setcontext", 0); diff --git a/test/lsan/TestCases/large_allocation_leak.cc b/test/lsan/TestCases/large_allocation_leak.cc index f41143a8a501..9d5698c9f8a6 100644 --- a/test/lsan/TestCases/large_allocation_leak.cc +++ b/test/lsan/TestCases/large_allocation_leak.cc @@ -5,14 +5,15 @@ #include <stdio.h> #include <stdlib.h> +#include "sanitizer_common/print_address.h" int main() { // maxsize in primary allocator is always less than this (1 << 25). void *large_alloc = malloc(33554432); - fprintf(stderr, "Test alloc: %p.\n", large_alloc); + print_address("Test alloc: ", 1, large_alloc); return 0; } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (33554432 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: diff --git a/test/lsan/TestCases/pointer_to_self.cc b/test/lsan/TestCases/pointer_to_self.cc index 63bde2ccf35d..40c122811f18 100644 --- a/test/lsan/TestCases/pointer_to_self.cc +++ b/test/lsan/TestCases/pointer_to_self.cc @@ -6,13 +6,14 @@ #include <stdio.h> #include <stdlib.h> +#include "sanitizer_common/print_address.h" int main() { void *p = malloc(1337); *reinterpret_cast<void **>(p) = p; - fprintf(stderr, "Test alloc: %p.\n", p); + print_address("Test alloc: ", 1, p); } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: diff --git a/test/lsan/TestCases/stale_stack_leak.cc b/test/lsan/TestCases/stale_stack_leak.cc index 4b8a54edf4cc..770096b08888 100644 --- a/test/lsan/TestCases/stale_stack_leak.cc +++ b/test/lsan/TestCases/stale_stack_leak.cc @@ -6,6 +6,7 @@ #include <stdio.h> #include <stdlib.h> +#include "sanitizer_common/print_address.h" void **pp; @@ -18,7 +19,7 @@ void *PutPointerOnStaleStack(void *p) { void *locals[2048]; locals[0] = p; pp = &locals[0]; - fprintf(stderr, "Test alloc: %p.\n", locals[0]); + print_address("Test alloc: ", 1, locals[0]); return 0; } @@ -33,11 +34,11 @@ int main() { __attribute__((destructor)) __attribute__((no_sanitize_address)) void ConfirmPointerHasSurvived() { - fprintf(stderr, "Value after LSan: %p.\n", *pp); + print_address("Value after LSan: ", 1, *pp); } -// CHECK: Test alloc: [[ADDR:.*]]. -// CHECK-sanity: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] +// CHECK-sanity: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: -// CHECK-sanity: Value after LSan: [[ADDR]]. +// CHECK-sanity: Value after LSan: [[ADDR]] diff --git a/test/lsan/TestCases/strace_test.cc b/test/lsan/TestCases/strace_test.cc new file mode 100644 index 000000000000..b3568d0b44e8 --- /dev/null +++ b/test/lsan/TestCases/strace_test.cc @@ -0,0 +1,14 @@ +// Test that lsan reports a proper error when running under strace. +// RUN: %clangxx_lsan %s -o %t +// RUN: not strace -o /dev/null %run %t 2>&1 | FileCheck %s + +#include <stdio.h> +#include <stdlib.h> + +static volatile void *sink; + +int main() { + sink = malloc(42); +} +// CHECK: LeakSanitizer has encountered a fatal error +// CHECK: HINT: LeakSanitizer does not work under ptrace (strace, gdb, etc) diff --git a/test/lsan/TestCases/use_after_return.cc b/test/lsan/TestCases/use_after_return.cc index eb917c01ea80..ed9cc785f0f5 100644 --- a/test/lsan/TestCases/use_after_return.cc +++ b/test/lsan/TestCases/use_after_return.cc @@ -8,16 +8,17 @@ #include <stdio.h> #include <stdlib.h> +#include "sanitizer_common/print_address.h" int main() { void *stack_var = malloc(1337); - fprintf(stderr, "Test alloc: %p.\n", stack_var); + print_address("Test alloc: ", 1, stack_var); // Take pointer to variable, to ensure it's not optimized into a register. - fprintf(stderr, "Stack var at: %p.\n", &stack_var); + print_address("Stack var at: ", 1, &stack_var); // Do not return from main to prevent the pointer from going out of scope. exit(0); } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: diff --git a/test/lsan/TestCases/use_globals_initialized.cc b/test/lsan/TestCases/use_globals_initialized.cc index 172d22a9f056..45c12dc4e120 100644 --- a/test/lsan/TestCases/use_globals_initialized.cc +++ b/test/lsan/TestCases/use_globals_initialized.cc @@ -7,15 +7,16 @@ #include <stdio.h> #include <stdlib.h> +#include "sanitizer_common/print_address.h" void *data_var = (void *)1; int main() { data_var = malloc(1337); - fprintf(stderr, "Test alloc: %p.\n", data_var); + print_address("Test alloc: ", 1, data_var); return 0; } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: diff --git a/test/lsan/TestCases/use_globals_uninitialized.cc b/test/lsan/TestCases/use_globals_uninitialized.cc index 2daa661611f4..c198fcc7cbbb 100644 --- a/test/lsan/TestCases/use_globals_uninitialized.cc +++ b/test/lsan/TestCases/use_globals_uninitialized.cc @@ -7,15 +7,16 @@ #include <stdio.h> #include <stdlib.h> +#include "sanitizer_common/print_address.h" void *bss_var; int main() { bss_var = malloc(1337); - fprintf(stderr, "Test alloc: %p.\n", bss_var); + print_address("Test alloc: ", 1, bss_var); return 0; } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: diff --git a/test/lsan/TestCases/use_poisoned_asan.cc b/test/lsan/TestCases/use_poisoned_asan.cc index a1c544c55f28..5acceeb8ce0a 100644 --- a/test/lsan/TestCases/use_poisoned_asan.cc +++ b/test/lsan/TestCases/use_poisoned_asan.cc @@ -9,17 +9,18 @@ #include <stdlib.h> #include <sanitizer/asan_interface.h> #include <assert.h> +#include "sanitizer_common/print_address.h" void **p; int main() { p = new void *; *p = malloc(1337); - fprintf(stderr, "Test alloc: %p.\n", *p); + print_address("Test alloc: ", 1, *p); __asan_poison_memory_region(p, sizeof(*p)); return 0; } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: AddressSanitizer: diff --git a/test/lsan/TestCases/use_registers.cc b/test/lsan/TestCases/use_registers.cc index 74301a26c32c..7647679f4796 100644 --- a/test/lsan/TestCases/use_registers.cc +++ b/test/lsan/TestCases/use_registers.cc @@ -10,6 +10,7 @@ #include <sched.h> #include <stdio.h> #include <stdlib.h> +#include "sanitizer_common/print_address.h" extern "C" void *registers_thread_func(void *arg) { @@ -35,7 +36,7 @@ void *registers_thread_func(void *arg) { #else #error "Test is not supported on this architecture." #endif - fprintf(stderr, "Test alloc: %p.\n", p); + print_address("Test alloc: ", 1, p); fflush(stderr); __sync_fetch_and_xor(sync, 1); while (true) @@ -51,7 +52,7 @@ int main() { sched_yield(); return 0; } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: diff --git a/test/lsan/TestCases/use_stacks.cc b/test/lsan/TestCases/use_stacks.cc index 7afcde15c733..c32af6841260 100644 --- a/test/lsan/TestCases/use_stacks.cc +++ b/test/lsan/TestCases/use_stacks.cc @@ -7,14 +7,15 @@ #include <stdio.h> #include <stdlib.h> +#include "sanitizer_common/print_address.h" int main() { void *stack_var = malloc(1337); - fprintf(stderr, "Test alloc: %p.\n", stack_var); + print_address("Test alloc: ", 1, stack_var); // Do not return from main to prevent the pointer from going out of scope. exit(0); } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: diff --git a/test/lsan/TestCases/use_stacks_threaded.cc b/test/lsan/TestCases/use_stacks_threaded.cc index a1d4383e9569..ac1fb466fa03 100644 --- a/test/lsan/TestCases/use_stacks_threaded.cc +++ b/test/lsan/TestCases/use_stacks_threaded.cc @@ -10,12 +10,13 @@ #include <sched.h> #include <stdio.h> #include <stdlib.h> +#include "sanitizer_common/print_address.h" extern "C" void *stacks_thread_func(void *arg) { int *sync = reinterpret_cast<int *>(arg); void *p = malloc(1337); - fprintf(stderr, "Test alloc: %p.\n", p); + print_address("Test alloc: ", 1, p); fflush(stderr); __sync_fetch_and_xor(sync, 1); while (true) @@ -31,7 +32,7 @@ int main() { sched_yield(); return 0; } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: diff --git a/test/lsan/TestCases/use_tls_dynamic.cc b/test/lsan/TestCases/use_tls_dynamic.cc index 207894b0fffd..927c5c4f768e 100644 --- a/test/lsan/TestCases/use_tls_dynamic.cc +++ b/test/lsan/TestCases/use_tls_dynamic.cc @@ -12,6 +12,7 @@ #include <stdio.h> #include <stdlib.h> #include <string> +#include "sanitizer_common/print_address.h" int main(int argc, char *argv[]) { std::string path = std::string(argv[0]) + "-so.so"; @@ -26,10 +27,10 @@ int main(int argc, char *argv[]) { // If we don't know about dynamic TLS, we will return a false leak above. void **p_in_tls = StoreToTLS(p); assert(*p_in_tls == p); - fprintf(stderr, "Test alloc: %p.\n", p); + print_address("Test alloc: ", 1, p); return 0; } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: diff --git a/test/lsan/TestCases/use_tls_pthread_specific_dynamic.cc b/test/lsan/TestCases/use_tls_pthread_specific_dynamic.cc index 14883712e608..9ab4e1cdbc0e 100644 --- a/test/lsan/TestCases/use_tls_pthread_specific_dynamic.cc +++ b/test/lsan/TestCases/use_tls_pthread_specific_dynamic.cc @@ -9,6 +9,7 @@ #include <pthread.h> #include <stdio.h> #include <stdlib.h> +#include "sanitizer_common/print_address.h" // From glibc: this many keys are stored in the thread descriptor directly. const unsigned PTHREAD_KEY_2NDLEVEL_SIZE = 32; @@ -28,10 +29,10 @@ int main() { void *p = malloc(1337); res = pthread_setspecific(key, p); assert(res == 0); - fprintf(stderr, "Test alloc: %p.\n", p); + print_address("Test alloc: ", 1, p); return 0; } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: diff --git a/test/lsan/TestCases/use_tls_pthread_specific_static.cc b/test/lsan/TestCases/use_tls_pthread_specific_static.cc index 1fd5681b6080..be0bcf628754 100644 --- a/test/lsan/TestCases/use_tls_pthread_specific_static.cc +++ b/test/lsan/TestCases/use_tls_pthread_specific_static.cc @@ -9,6 +9,7 @@ #include <pthread.h> #include <stdio.h> #include <stdlib.h> +#include "sanitizer_common/print_address.h" // From glibc: this many keys are stored in the thread descriptor directly. const unsigned PTHREAD_KEY_2NDLEVEL_SIZE = 32; @@ -22,10 +23,10 @@ int main() { void *p = malloc(1337); res = pthread_setspecific(key, p); assert(res == 0); - fprintf(stderr, "Test alloc: %p.\n", p); + print_address("Test alloc: ", 1, p); return 0; } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: diff --git a/test/lsan/TestCases/use_tls_static.cc b/test/lsan/TestCases/use_tls_static.cc index 50db23abb825..5ffaf166bcd5 100644 --- a/test/lsan/TestCases/use_tls_static.cc +++ b/test/lsan/TestCases/use_tls_static.cc @@ -7,15 +7,16 @@ #include <stdio.h> #include <stdlib.h> +#include "sanitizer_common/print_address.h" __thread void *tls_var; int main() { tls_var = malloc(1337); - fprintf(stderr, "Test alloc: %p.\n", tls_var); + print_address("Test alloc: ", 1, tls_var); return 0; } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: diff --git a/test/lsan/TestCases/use_unaligned.cc b/test/lsan/TestCases/use_unaligned.cc index 3e43ed4c092c..86c3ed5200a3 100644 --- a/test/lsan/TestCases/use_unaligned.cc +++ b/test/lsan/TestCases/use_unaligned.cc @@ -7,17 +7,18 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include "sanitizer_common/print_address.h" void *arr[2]; int main() { void *p = malloc(1337); - fprintf(stderr, "Test alloc: %p.\n", p); + print_address("Test alloc: ", 1, p); char *char_arr = (char *)arr; memcpy(char_arr + 1, &p, sizeof(p)); return 0; } -// CHECK: Test alloc: [[ADDR:.*]]. +// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]] // CHECK: LeakSanitizer: detected memory leaks // CHECK: [[ADDR]] (1337 bytes) // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: diff --git a/test/lsan/lit.common.cfg b/test/lsan/lit.common.cfg index a04c113269f2..6002e2d69444 100644 --- a/test/lsan/lit.common.cfg +++ b/test/lsan/lit.common.cfg @@ -31,8 +31,9 @@ config.name += config.name_suffix clang_cflags = ["-O0", config.target_cflags] + config.debug_info_flags clang_cxxflags = config.cxx_mode_flags + clang_cflags -clang_lsan_cflags = clang_cflags + lsan_cflags -clang_lsan_cxxflags = clang_cxxflags + lsan_cflags +lsan_incdir = config.test_source_root + "/../" +clang_lsan_cflags = clang_cflags + lsan_cflags + ["-I%s" % lsan_incdir] +clang_lsan_cxxflags = clang_cxxflags + lsan_cflags + ["-I%s" % lsan_incdir] config.clang_cflags = clang_cflags config.clang_cxxflags = clang_cxxflags |