From 7f208f02dbea6225db15dbdbf0e8d4778cc36fc5 Mon Sep 17 00:00:00 2001 From: Aaron Puchert Date: Tue, 9 Oct 2018 23:42:29 +0000 Subject: [PATCH] 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 --- libcxx/include/mutex | 2 +- .../libcxx/thread/thread.mutex/thread_safety_lock_guard.pass.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libcxx/include/mutex b/libcxx/include/mutex index 9c55c7c..6d2de2b 100644 --- a/libcxx/include/mutex +++ b/libcxx/include/mutex @@ -489,7 +489,7 @@ public: }; template -class _LIBCPP_TEMPLATE_VIS scoped_lock<_Mutex> { +class _LIBCPP_TEMPLATE_VIS _LIBCPP_THREAD_SAFETY_ANNOTATION(scoped_lockable) scoped_lock<_Mutex> { public: typedef _Mutex mutex_type; private: diff --git a/libcxx/test/libcxx/thread/thread.mutex/thread_safety_lock_guard.pass.cpp b/libcxx/test/libcxx/thread/thread.mutex/thread_safety_lock_guard.pass.cpp index 6024d99..bd015fe 100644 --- a/libcxx/test/libcxx/thread/thread.mutex/thread_safety_lock_guard.pass.cpp +++ b/libcxx/test/libcxx/thread/thread.mutex/thread_safety_lock_guard.pass.cpp @@ -24,7 +24,13 @@ std::mutex m; int foo __attribute__((guarded_by(m))); +static void scoped() { + std::scoped_lock lock(m); + foo++; +} + int main() { + scoped(); std::lock_guard lock(m); foo++; } -- 2.7.4