brintos

brintos / llvm-project-archived public Read only

0
0
Text · 833 B · 5f17cfb Raw
37 lines · cpp
1// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s2#include "test.h"3#include <string.h>4 5int x[4], z[4];6 7void *MemCpyThread(void *a) {8  memcpy((int*)a, z, 16);9  barrier_wait(&barrier);10  return NULL;11}12 13void *MemSetThread(void *a) {14  barrier_wait(&barrier);15  memset((int*)a, 0, 16);16  return NULL;17}18 19int main() {20  barrier_init(&barrier, 2);21  pthread_t t[2];22  // Race on x between memcpy and memset23  pthread_create(&t[0], NULL, MemCpyThread, x);24  pthread_create(&t[1], NULL, MemSetThread, x);25  pthread_join(t[0], NULL);26  pthread_join(t[1], NULL);27  fprintf(stderr, "PASS\n");28  return 0;29}30 31// CHECK: WARNING: ThreadSanitizer: data race32// CHECK:   #0 {{.*}}memset33// CHECK:   #{{[12]}} MemSetThread34// CHECK:  Previous write35// CHECK:   #0 {{.*mem(cpy|move)}}36// CHECK:   #{{[12]}} MemCpyThread37