Mercurial > hg > CbC > CbC_llvm
comparison clang/test/SemaTemplate/warn-thread-safety-analysis.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
1 // RUN: %clang_cc1 -std=c++11 %s -verify -Wthread-safety-analysis | |
2 | |
3 class Mutex { | |
4 public: | |
5 void Lock() __attribute__((exclusive_lock_function())); | |
6 void Unlock() __attribute__((unlock_function())); | |
7 }; | |
8 | |
9 class A { | |
10 public: | |
11 Mutex mu1, mu2; | |
12 | |
13 void foo() __attribute__((exclusive_locks_required(mu1))) __attribute__((exclusive_locks_required(mu2))) {} | |
14 | |
15 template <class T> void bar() __attribute__((exclusive_locks_required(mu1))) __attribute__((exclusive_locks_required(mu2))) { | |
16 foo(); | |
17 } | |
18 }; | |
19 | |
20 void f() { | |
21 A a; | |
22 a.mu1.Lock(); | |
23 a.mu2.Lock(); | |
24 a.bar<int>(); | |
25 a.mu2.Unlock(); | |
26 a.bar<int>(); // expected-warning {{calling function 'bar<int>' requires holding mutex 'a.mu2' exclusively}} | |
27 a.mu1.Unlock(); | |
28 a.bar<int>(); // expected-warning {{calling function 'bar<int>' requires holding mutex 'a.mu1' exclusively}} \ | |
29 expected-warning {{calling function 'bar<int>' requires holding mutex 'a.mu2' exclusively}} | |
30 } |