brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 66ce58e Raw
35 lines · cpp
1// Test that statically allocated thread-specific storage is included in the root set.2// RUN: %clangxx_lsan %s -o %t3// RUN: %env_lsan_opts="report_objects=1:use_stacks=0:use_registers=0:use_tls=0" not %run %t 2>&1 | FileCheck %s4// RUN: %env_lsan_opts="report_objects=1:use_stacks=0:use_registers=0:use_tls=1" %run %t 2>&15// RUN: %env_lsan_opts="" %run %t 2>&16 7#include <assert.h>8#include <pthread.h>9#include <stdio.h>10#include <stdlib.h>11#include "sanitizer_common/print_address.h"12 13// From glibc: this many keys are stored in the thread descriptor directly.14const unsigned PTHREAD_KEY_2NDLEVEL_SIZE = 32;15 16int main() {17  pthread_key_t key;18  int res;19  res = pthread_key_create(&key, NULL);20  assert(res == 0);21#if !defined(__ANDROID__) && !defined(__BIONIC__)22  // Bionic doesn't have specific limit.23  assert(key < PTHREAD_KEY_2NDLEVEL_SIZE);24#endif25  void *p = malloc(1337);26  res = pthread_setspecific(key, p);27  assert(res == 0);28  print_address("Test alloc: ", 1, p);29  return 0;30}31// CHECK: Test alloc: [[ADDR:0x[0-9,a-f]+]]32// CHECK: LeakSanitizer: detected memory leaks33// CHECK: [[ADDR]] (1337 bytes)34// CHECK: SUMMARY: {{.*}}Sanitizer:35