brintos

brintos / llvm-project-archived public Read only

0
0
Text · 910 B · 59fa452 Raw
50 lines · cpp
1// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s2#include "test.h"3 4// Test that a linker-initialized mutex can be created/destroyed while in use.5 6// Stub for testing, just invokes annotations.7// Meant to be synchronized externally with test barrier.8class Mutex {9 public:10  void Create(bool linker_initialized = false) {11    if (linker_initialized)12      ANNOTATE_RWLOCK_CREATE_STATIC(&state_);13    else14      ANNOTATE_RWLOCK_CREATE(&state_);15  }16 17  void Destroy() {18    ANNOTATE_RWLOCK_DESTROY(&state_);19  }20 21  void Lock() {22    ANNOTATE_RWLOCK_ACQUIRED(&state_, true);23  }24 25  void Unlock() {26    ANNOTATE_RWLOCK_RELEASED(&state_, true);27  }28 29 private:30  long long state_;31};32 33int main() {34  Mutex m;35 36  m.Lock();37  m.Create(true);38  m.Unlock();39 40  m.Lock();41  m.Destroy();42  m.Unlock();43 44  fprintf(stderr, "DONE\n");45  return 0;46}47 48// CHECK-NOT: WARNING: ThreadSanitizer:49// CHECK: DONE50