brintos

brintos / llvm-project-archived public Read only

0
0
Text · 839 B · cd4bb58 Raw
38 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 y[4], z[4];6 7void *MemMoveThread(void *a) {8  memmove((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 y between memmove and memset23  pthread_create(&t[0], NULL, MemMoveThread, y);24  pthread_create(&t[1], NULL, MemSetThread, y);25  pthread_join(t[0], NULL);26  pthread_join(t[1], NULL);27 28  fprintf(stderr, "PASS\n");29  return 0;30}31 32// CHECK: WARNING: ThreadSanitizer: data race33// CHECK:   #0 {{.*}}memset34// CHECK:   #{{[12]}} MemSetThread35// CHECK:  Previous write36// CHECK:   #0 {{.*mem(cpy|move)}}37// CHECK:   #{{[12]}} MemMoveThread38