summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorDeLesley Hutchins <delesley@google.com>2012-02-16 17:03:24 +0000
committerDeLesley Hutchins <delesley@google.com>2012-02-16 17:03:24 +0000
commitbc8ffdb68ca93699080cf43f7d46a6a5cc0dba6f (patch)
tree18445037c73e022d881b82ddbafd2532728ca90f /clang/test
parentfbb50f19ad7e627dfe6d384050a253a81b834f81 (diff)
downloadbcm5719-llvm-bc8ffdb68ca93699080cf43f7d46a6a5cc0dba6f.tar.gz
bcm5719-llvm-bc8ffdb68ca93699080cf43f7d46a6a5cc0dba6f.zip
Thread-Safety: added support for 'this' as a lock expression.
llvm-svn: 150700
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/SemaCXX/warn-thread-safety-analysis.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/warn-thread-safety-analysis.cpp b/clang/test/SemaCXX/warn-thread-safety-analysis.cpp
index e0fde6b2555..20d816a41d8 100644
--- a/clang/test/SemaCXX/warn-thread-safety-analysis.cpp
+++ b/clang/test/SemaCXX/warn-thread-safety-analysis.cpp
@@ -2049,5 +2049,35 @@ void test() {
// expected-warning {{calling function 'foo' requires exclusive lock on 'mu_'}}
}
+} // end namespace FunctionDefinitionTest
+
+
+namespace SelfLockingTest {
+
+class LOCKABLE MyLock {
+public:
+ int foo GUARDED_BY(this);
+
+ void lock() EXCLUSIVE_LOCK_FUNCTION();
+ void unlock() UNLOCK_FUNCTION();
+
+ void doSomething() {
+ this->lock(); // allow 'this' as a lock expression
+ foo = 0;
+ doSomethingElse();
+ this->unlock();
+ }
+
+ void doSomethingElse() EXCLUSIVE_LOCKS_REQUIRED(this) {
+ foo = 1;
+ };
+
+ void test() {
+ foo = 2; // \
+ // expected-warning {{writing variable 'foo' requires locking 'this' exclusively}}
+ }
};
+} // end namespace SelfLockingTest
+
+
OpenPOWER on IntegriCloud