Annotate scoped_lock as with scoped_lockable attribute

Summary:
Scoped capabilities need to be annotated as such, otherwise the thread
safety analysis won't work as intended.

Fixes PR39234.

Reviewers: ldionne

Reviewed By: ldionne

Subscribers: christof, libcxx-commits

Differential Revision: https://reviews.llvm.org/D53049

llvm-svn: 344096
This commit is contained in:
Aaron Puchert 2018-10-09 23:42:29 +00:00
parent e5f47bbeac
commit 7f208f02db
2 changed files with 7 additions and 1 deletions

View File

@ -489,7 +489,7 @@ public:
}; };
template <class _Mutex> template <class _Mutex>
class _LIBCPP_TEMPLATE_VIS scoped_lock<_Mutex> { class _LIBCPP_TEMPLATE_VIS _LIBCPP_THREAD_SAFETY_ANNOTATION(scoped_lockable) scoped_lock<_Mutex> {
public: public:
typedef _Mutex mutex_type; typedef _Mutex mutex_type;
private: private:

View File

@ -24,7 +24,13 @@
std::mutex m; std::mutex m;
int foo __attribute__((guarded_by(m))); int foo __attribute__((guarded_by(m)));
static void scoped() {
std::scoped_lock<std::mutex> lock(m);
foo++;
}
int main() { int main() {
scoped();
std::lock_guard<std::mutex> lock(m); std::lock_guard<std::mutex> lock(m);
foo++; foo++;
} }