brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.0 KiB · ccd996c Raw
41 lines · cpp
1// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s2// This test fails on powerpc64 big endian.3// The Tsan report is returning wrong information about4// the location of the race.5// XFAIL: target=powerpc64-unknown-linux-gnu{{.*}}6#include "java.h"7 8void foobar() {9}10 11void barbaz() {12}13 14void *Thread(void *p) {15  barrier_wait(&barrier);16  __tsan_read1_pc((jptr)p, (jptr)foobar + kPCInc);17  return 0;18}19 20int main() {21  barrier_init(&barrier, 2);22  int const kHeapSize = 1024 * 1024;23  jptr jheap = (jptr)malloc(kHeapSize + 8) + 8;24  __tsan_java_init(jheap, kHeapSize);25  const int kBlockSize = 16;26  __tsan_java_alloc(jheap, kBlockSize);27  pthread_t th;28  pthread_create(&th, 0, Thread, (void*)jheap);29  __tsan_write1_pc((jptr)jheap, (jptr)barbaz + kPCInc);30  barrier_wait(&barrier);31  pthread_join(th, 0);32  __tsan_java_free(jheap, kBlockSize);33  fprintf(stderr, "DONE\n");34  return __tsan_java_fini();35}36 37// CHECK: WARNING: ThreadSanitizer: data race38// CHECK:     #0 foobar39// CHECK:     #0 barbaz40// CHECK: DONE41