annotate clang/test/SemaTemplate/warn-thread-safety-analysis.cpp @ 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: %clang_cc1 -std=c++11 %s -verify -Wthread-safety-analysis
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3 class Mutex {
anatofuz
parents:
diff changeset
4 public:
anatofuz
parents:
diff changeset
5 void Lock() __attribute__((exclusive_lock_function()));
anatofuz
parents:
diff changeset
6 void Unlock() __attribute__((unlock_function()));
anatofuz
parents:
diff changeset
7 };
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 class A {
anatofuz
parents:
diff changeset
10 public:
anatofuz
parents:
diff changeset
11 Mutex mu1, mu2;
anatofuz
parents:
diff changeset
12
anatofuz
parents:
diff changeset
13 void foo() __attribute__((exclusive_locks_required(mu1))) __attribute__((exclusive_locks_required(mu2))) {}
anatofuz
parents:
diff changeset
14
anatofuz
parents:
diff changeset
15 template <class T> void bar() __attribute__((exclusive_locks_required(mu1))) __attribute__((exclusive_locks_required(mu2))) {
anatofuz
parents:
diff changeset
16 foo();
anatofuz
parents:
diff changeset
17 }
anatofuz
parents:
diff changeset
18 };
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 void f() {
anatofuz
parents:
diff changeset
21 A a;
anatofuz
parents:
diff changeset
22 a.mu1.Lock();
anatofuz
parents:
diff changeset
23 a.mu2.Lock();
anatofuz
parents:
diff changeset
24 a.bar<int>();
anatofuz
parents:
diff changeset
25 a.mu2.Unlock();
anatofuz
parents:
diff changeset
26 a.bar<int>(); // expected-warning {{calling function 'bar<int>' requires holding mutex 'a.mu2' exclusively}}
anatofuz
parents:
diff changeset
27 a.mu1.Unlock();
anatofuz
parents:
diff changeset
28 a.bar<int>(); // expected-warning {{calling function 'bar<int>' requires holding mutex 'a.mu1' exclusively}} \
anatofuz
parents:
diff changeset
29 expected-warning {{calling function 'bar<int>' requires holding mutex 'a.mu2' exclusively}}
anatofuz
parents:
diff changeset
30 }