[docs] Fix build-docs.sh
[llvm-project.git] / compiler-rt / test / lsan / TestCases / Linux / disabler_in_tsd_destructor.c
blob6e3a9b349fc4e3ea22be4c69ce98acfbf7ffd36a
1 // Regression test. Disabler should not depend on TSD validity.
2 // RUN: %clang_lsan %s -o %t
3 // RUN: %env_lsan_opts="report_objects=1:use_registers=0:use_stacks=0:use_tls=1:use_ld_allocations=0" %run %t
5 #include <assert.h>
6 #include <pthread.h>
7 #include <stdio.h>
8 #include <stdlib.h>
10 #include "sanitizer/lsan_interface.h"
12 pthread_key_t key;
14 void key_destructor(void *arg) {
15 __lsan_disable();
16 void *p = malloc(1337);
17 // Break optimization.
18 fprintf(stderr, "Test alloc: %p.\n", p);
19 pthread_setspecific(key, 0);
20 __lsan_enable();
23 void *thread_func(void *arg) {
24 int res = pthread_setspecific(key, (void*)1);
25 assert(res == 0);
26 return 0;
29 int main() {
30 int res = pthread_key_create(&key, &key_destructor);
31 assert(res == 0);
32 pthread_t thread_id;
33 res = pthread_create(&thread_id, 0, thread_func, 0);
34 assert(res == 0);
35 res = pthread_join(thread_id, 0);
36 assert(res == 0);
37 return 0;