--- /dev/null
+// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
+#include "test.h"
+
+volatile long global;
+
+void *thread(void *x) {
+ global++;
+ barrier_wait(&barrier);
+ return nullptr;
+}
+
+void on_exit_callback(int status, void *arg) {
+ fprintf(stderr, "on_exit_callback(%d, %lu)\n", status, (long)arg);
+ global++;
+}
+
+int main() {
+ on_exit(on_exit_callback, (void *)42l);
+ barrier_init(&barrier, 2);
+ pthread_t th;
+ pthread_create(&th, nullptr, thread, nullptr);
+ pthread_detach(th);
+ barrier_wait(&barrier);
+ return 2;
+}
+
+// CHECK: on_exit_callback(2, 42)
+// CHECK: WARNING: ThreadSanitizer: data race
+// CHECK: Write of size 8
+// CHECK: #0 on_exit_callback
+// CHECK: #1 on_exit_wrapper