Mercurial > hg > CbC > CbC_llvm
view clang/test/SemaTemplate/warn-thread-safety-analysis.cpp @ 207:2e18cbf3894f
LLVM12
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Jun 2021 06:07:14 +0900 |
parents | 1d019706d866 |
children |
line wrap: on
line source
// RUN: %clang_cc1 -std=c++11 %s -verify -Wthread-safety-analysis class Mutex { public: void Lock() __attribute__((exclusive_lock_function())); void Unlock() __attribute__((unlock_function())); }; class A { public: Mutex mu1, mu2; void foo() __attribute__((exclusive_locks_required(mu1))) __attribute__((exclusive_locks_required(mu2))) {} template <class T> void bar() __attribute__((exclusive_locks_required(mu1))) __attribute__((exclusive_locks_required(mu2))) { foo(); } }; void f() { A a; a.mu1.Lock(); a.mu2.Lock(); a.bar<int>(); a.mu2.Unlock(); a.bar<int>(); // expected-warning {{calling function 'bar<int>' requires holding mutex 'a.mu2' exclusively}} a.mu1.Unlock(); a.bar<int>(); // expected-warning {{calling function 'bar<int>' requires holding mutex 'a.mu1' exclusively}} \ expected-warning {{calling function 'bar<int>' requires holding mutex 'a.mu2' exclusively}} }