[PATCH] D87064: Thread safety analysis: Test and document release_generic_capability
Aaron Puchert via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 2 17:52:41 PDT 2020
aaronpuchert created this revision.
aaronpuchert added a reviewer: aaron.ballman.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
aaronpuchert requested review of this revision.
The old locking attributes had a generic release, but as it turns out
the capability-based attributes have it as well.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D87064
Files:
clang/docs/ThreadSafetyAnalysis.rst
clang/test/SemaCXX/thread-safety-annotations.h
Index: clang/test/SemaCXX/thread-safety-annotations.h
===================================================================
--- clang/test/SemaCXX/thread-safety-annotations.h
+++ clang/test/SemaCXX/thread-safety-annotations.h
@@ -6,6 +6,7 @@
#define ASSERT_SHARED_LOCK(...) __attribute__((assert_shared_capability(__VA_ARGS__)))
#define EXCLUSIVE_LOCK_FUNCTION(...) __attribute__((acquire_capability(__VA_ARGS__)))
#define SHARED_LOCK_FUNCTION(...) __attribute__((acquire_shared_capability(__VA_ARGS__)))
+#define UNLOCK_FUNCTION(...) __attribute__((release_generic_capability(__VA_ARGS__)))
#define EXCLUSIVE_TRYLOCK_FUNCTION(...) __attribute__((try_acquire_capability(__VA_ARGS__)))
#define SHARED_TRYLOCK_FUNCTION(...) __attribute__((try_acquire_shared_capability(__VA_ARGS__)))
#define EXCLUSIVE_LOCKS_REQUIRED(...) __attribute__((requires_capability(__VA_ARGS__)))
@@ -16,6 +17,7 @@
#define ASSERT_SHARED_LOCK(...) __attribute__((assert_shared_lock(__VA_ARGS__)))
#define EXCLUSIVE_LOCK_FUNCTION(...) __attribute__((exclusive_lock_function(__VA_ARGS__)))
#define SHARED_LOCK_FUNCTION(...) __attribute__((shared_lock_function(__VA_ARGS__)))
+#define UNLOCK_FUNCTION(...) __attribute__((unlock_function(__VA_ARGS__)))
#define EXCLUSIVE_TRYLOCK_FUNCTION(...) __attribute__((exclusive_trylock_function(__VA_ARGS__)))
#define SHARED_TRYLOCK_FUNCTION(...) __attribute__((shared_trylock_function(__VA_ARGS__)))
#define EXCLUSIVE_LOCKS_REQUIRED(...) __attribute__((exclusive_locks_required(__VA_ARGS__)))
@@ -23,7 +25,6 @@
#endif
// Lock semantics only
-#define UNLOCK_FUNCTION(...) __attribute__((unlock_function(__VA_ARGS__)))
#define GUARDED_VAR __attribute__((guarded_var))
#define PT_GUARDED_VAR __attribute__((pt_guarded_var))
Index: clang/docs/ThreadSafetyAnalysis.rst
===================================================================
--- clang/docs/ThreadSafetyAnalysis.rst
+++ clang/docs/ThreadSafetyAnalysis.rst
@@ -800,6 +800,9 @@
#define RELEASE_SHARED(...) \
THREAD_ANNOTATION_ATTRIBUTE__(release_shared_capability(__VA_ARGS__))
+ #define RELEASE_GENERIC(...) \
+ THREAD_ANNOTATION_ATTRIBUTE__(release_generic_capability(__VA_ARGS__))
+
#define TRY_ACQUIRE(...) \
THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_capability(__VA_ARGS__))
@@ -844,6 +847,9 @@
// Release/unlock a shared mutex.
void ReaderUnlock() RELEASE_SHARED();
+ // Generic unlock, can unlock exclusive and shared mutexes.
+ void GenericUnlock() RELEASE_GENERIC();
+
// Try to acquire the mutex. Returns true on success, and false on failure.
bool TryLock() TRY_ACQUIRE(true);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D87064.289610.patch
Type: text/x-patch
Size: 2738 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200903/e586657d/attachment-0001.bin>
More information about the cfe-commits
mailing list