// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
#include "../test.h"
#include <memory.h>

// A reproducer for a known issue.
// See reference to double_race.cpp in tsan_rtl_report.cpp for an explanation.

long long buf[2];
volatile int nreport;

__attribute__((disable_sanitizer_instrumentation)) void
__sanitizer_report_error_summary(const char *summary) {
  nreport++;
}

const int kEventPCBits = 61;

extern "C" __attribute__((disable_sanitizer_instrumentation)) bool
__tsan_symbolize_external(unsigned long pc, char *func_buf,
                          unsigned long func_siz, char *file_buf,
                          unsigned long file_siz, int *line, int *col) {
  if (pc >> kEventPCBits) {
    printf("bad PC passed to __tsan_symbolize_external: %lx\n", pc);
    _exit(1);
  }
  return true;
}

void *Thread(void *arg) {
  barrier_wait(&barrier);
  memset(buf, 2, sizeof(buf));
  return 0;
}

int main() {
  barrier_init(&barrier, 2);
  pthread_t t;
  pthread_create(&t, 0, Thread, 0);
  memset(buf, 1, sizeof(buf));
  barrier_wait(&barrier);
  pthread_join(t, 0);
  return 0;
}

// CHECK: WARNING: ThreadSanitizer: data race
// CHECK:   Write of size 8 at {{.*}} by thread T1:
// CHECK:     #0 memset
// CHECK:     #{{[12]}} Thread
// CHECK-NOT: bad PC passed to __tsan_symbolize_external
// CHECK-NOT: __sanitizer_report_error_summary
// CHECK-NOT: WARNING: ThreadSanitizer: data race
