39 lines · c
1// Regression test. Disabler should not depend on TSD validity.2// RUN: %clang_lsan %s -o %t3// RUN: %env_lsan_opts="report_objects=1:use_registers=0:use_stacks=0:use_tls=1:use_ld_allocations=0" %run %t4 5#include <assert.h>6#include <pthread.h>7#include <stdio.h>8#include <stdlib.h>9 10#include "sanitizer/lsan_interface.h"11 12pthread_key_t key;13 14void 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();21}22 23void *thread_func(void *arg) {24 int res = pthread_setspecific(key, (void*)1);25 assert(res == 0);26 return 0;27}28 29int 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;38}39