llvm/compiler-rt/test/nsan/Posix/tls_reuse.c

/// The static TLS block is reused among by threads. The shadow is cleared.
// RUN: %clang_nsan %s -o %t
// RUN: env NSAN_OPTIONS=halt_on_error=1,log2_max_relative_error=19 %run %t

#include <pthread.h>
#include <stdio.h>

__thread float x;

static void *ThreadFn(void *a) {
  long i = (long)a;
  for (long j = i * 1000; j < (i + 1) * 1000; j++)
    x += j;
  printf("%f\n", x);
  return 0;
}

int main() {
  pthread_t t;
  for (long i = 0; i < 5; ++i) {
    pthread_create(&t, 0, ThreadFn, (void *)i);
    pthread_join(t, 0);
  }
}