annotate compiler-rt/test/tsan/mutex_cycle2.c @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 1d019706d866
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clangxx_tsan %s -o %t
anatofuz
parents:
diff changeset
2 // RUN: not %run %t 2>&1 | FileCheck %s
anatofuz
parents:
diff changeset
3 // RUN: %env_tsan_opts=detect_deadlocks=1 not %run %t 2>&1 | FileCheck %s
anatofuz
parents:
diff changeset
4 // RUN: %env_tsan_opts=detect_deadlocks=0 %run %t 2>&1 | FileCheck %s --check-prefix=DISABLED
anatofuz
parents:
diff changeset
5 // RUN: echo "deadlock:main" > %t.supp
anatofuz
parents:
diff changeset
6 // RUN: %env_tsan_opts=suppressions='%t.supp' %run %t 2>&1 | FileCheck %s --check-prefix=DISABLED
anatofuz
parents:
diff changeset
7 // RUN: echo "deadlock:zzzz" > %t.supp
anatofuz
parents:
diff changeset
8 // RUN: %env_tsan_opts=suppressions='%t.supp' not %run %t 2>&1 | FileCheck %s
anatofuz
parents:
diff changeset
9 #include <pthread.h>
anatofuz
parents:
diff changeset
10 #include <stdio.h>
anatofuz
parents:
diff changeset
11
anatofuz
parents:
diff changeset
12 int main() {
anatofuz
parents:
diff changeset
13 pthread_mutex_t mu1, mu2;
anatofuz
parents:
diff changeset
14 pthread_mutex_init(&mu1, NULL);
anatofuz
parents:
diff changeset
15 pthread_mutex_init(&mu2, NULL);
anatofuz
parents:
diff changeset
16
anatofuz
parents:
diff changeset
17 // mu1 => mu2
anatofuz
parents:
diff changeset
18 pthread_mutex_lock(&mu1);
anatofuz
parents:
diff changeset
19 pthread_mutex_lock(&mu2);
anatofuz
parents:
diff changeset
20 pthread_mutex_unlock(&mu2);
anatofuz
parents:
diff changeset
21 pthread_mutex_unlock(&mu1);
anatofuz
parents:
diff changeset
22
anatofuz
parents:
diff changeset
23 // mu2 => mu1
anatofuz
parents:
diff changeset
24 pthread_mutex_lock(&mu2);
anatofuz
parents:
diff changeset
25 pthread_mutex_lock(&mu1);
anatofuz
parents:
diff changeset
26 // CHECK: ThreadSanitizer: lock-order-inversion (potential deadlock)
anatofuz
parents:
diff changeset
27 // DISABLED-NOT: ThreadSanitizer
anatofuz
parents:
diff changeset
28 // DISABLED: PASS
anatofuz
parents:
diff changeset
29 pthread_mutex_unlock(&mu1);
anatofuz
parents:
diff changeset
30 pthread_mutex_unlock(&mu2);
anatofuz
parents:
diff changeset
31
anatofuz
parents:
diff changeset
32 pthread_mutex_destroy(&mu1);
anatofuz
parents:
diff changeset
33 pthread_mutex_destroy(&mu2);
anatofuz
parents:
diff changeset
34 fprintf(stderr, "PASS\n");
anatofuz
parents:
diff changeset
35 }