brintos

brintos / llvm-project-archived public Read only

0
0
Text · 984 B · 30d89e5 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 7#include "test.h"8 9typedef unsigned long uptr;10extern "C" void __tsan_read_range_pc(uptr addr, uptr size, uptr pc);11extern "C" void __tsan_write_range_pc(uptr addr, uptr size, uptr pc);12 13void foobar() {14}15 16void barbaz() {17}18 19void *Thread(void *p) {20  barrier_wait(&barrier);21  __tsan_read_range_pc((uptr)p, 32, (uptr)foobar + kPCInc);22  return 0;23}24 25int main() {26  barrier_init(&barrier, 2);27  int a[128];28  pthread_t th;29  pthread_create(&th, 0, Thread, (void*)a);30  __tsan_write_range_pc((uptr)(a+2), 32, (uptr)barbaz + kPCInc);31  barrier_wait(&barrier);32  pthread_join(th, 0);33  fprintf(stderr, "DONE\n");34  return 0;35}36 37// CHECK: WARNING: ThreadSanitizer: data race38// CHECK:     #0 foobar39// CHECK:     #0 barbaz40// CHECK: DONE41