brintos

brintos / llvm-project-archived public Read only

0
0
Text · 843 B · d15b396 Raw
52 lines · cpp
1// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s2#include "test.h"3#include <semaphore.h>4 5struct A {6  A() {7    sem_init(&sem_, 0, 0);8  }9  virtual void F() {10  }11  void Done() {12    sem_post(&sem_);13  }14  virtual ~A() {15    sem_wait(&sem_);16    sem_destroy(&sem_);17  }18  sem_t sem_;19};20 21struct B : A {22  virtual void F() {23  }24  virtual ~B() { }25};26 27static A *obj = new B;28 29void *Thread1(void *x) {30  obj->F();31  obj->Done();32  barrier_wait(&barrier);33  return NULL;34}35 36void *Thread2(void *x) {37  barrier_wait(&barrier);38  delete obj;39  return NULL;40}41 42int main() {43  barrier_init(&barrier, 2);44  pthread_t t[2];45  pthread_create(&t[0], NULL, Thread1, NULL);46  pthread_create(&t[1], NULL, Thread2, NULL);47  pthread_join(t[0], NULL);48  pthread_join(t[1], NULL);49}50 51// CHECK: WARNING: ThreadSanitizer: data race on vptr52