From: Aaron Puchert Date: Tue, 9 Oct 2018 23:42:29 +0000 (+0000) Subject: Annotate scoped_lock as with scoped_lockable attribute X-Git-Tag: llvmorg-8.0.0-rc1~6930 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7f208f02dbea6225db15dbdbf0e8d4778cc36fc5;p=platform%2Fupstream%2Fllvm.git 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 --- 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++; }