diff compiler-rt/test/tsan/race_on_heap.cpp @ 150:1d019706d866

LLVM10
author anatofuz
date Thu, 13 Feb 2020 15:10:13 +0900
parents
children 2e18cbf3894f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler-rt/test/tsan/race_on_heap.cpp	Thu Feb 13 15:10:13 2020 +0900
@@ -0,0 +1,48 @@
+// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
+#include <pthread.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "test.h"
+
+void *Thread1(void *p) {
+  *(int*)p = 42;
+  return 0;
+}
+
+void *Thread2(void *p) {
+  *(int*)p = 44;
+  return 0;
+}
+
+void *alloc() {
+  return malloc(99);
+}
+
+void *AllocThread(void* arg) {
+  return alloc();
+}
+
+int main() {
+  void *p = 0;
+  pthread_t t[2];
+  pthread_create(&t[0], 0, AllocThread, 0);
+  pthread_join(t[0], &p);
+  print_address("addr=", 1, p);
+  pthread_create(&t[0], 0, Thread1, (char*)p + 16);
+  pthread_create(&t[1], 0, Thread2, (char*)p + 16);
+  pthread_join(t[0], 0);
+  pthread_join(t[1], 0);
+  return 0;
+}
+
+// CHECK: addr=[[ADDR:0x[0-9,a-f]+]]
+// CHECK: WARNING: ThreadSanitizer: data race
+// ...
+// CHECK: Location is heap block of size 99 at [[ADDR]] allocated by thread T1:
+// CHECK:     #0 malloc
+// CHECK:     #{{1|2}} alloc
+// CHECK:     #{{2|3}} AllocThread
+// ...
+// CHECK:   Thread T1 (tid={{.*}}, finished) created by main thread at:
+// CHECK:     #0 pthread_create
+// CHECK:     #1 main