OLD | NEW |
1 // RUN: %clang_cc1 -fsyntax-only -verify -Wthread-safety %s | 1 // RUN: %clang_cc1 -fsyntax-only -verify -Wthread-safety %s |
2 | 2 |
| 3 #define LOCKABLE __attribute__ ((lockable)) |
| 4 #define SCOPED_LOCKABLE __attribute__ ((scoped_lockable)) |
| 5 #define GUARDED_BY(x) __attribute__ ((guarded_by(x))) |
| 6 #define GUARDED_VAR __attribute__ ((guarded_var)) |
| 7 #define PT_GUARDED_BY(x) __attribute__ ((pt_guarded_by(x))) |
| 8 #define PT_GUARDED_VAR __attribute__ ((pt_guarded_var)) |
| 9 #define ACQUIRED_AFTER(...) __attribute__ ((acquired_after(__VA_ARGS__))) |
| 10 #define ACQUIRED_BEFORE(...) __attribute__ ((acquired_before(__VA_ARGS__))) |
| 11 #define EXCLUSIVE_LOCK_FUNCTION(...) __attribute__ ((exclusive_lock_function(_
_VA_ARGS__))) |
| 12 #define SHARED_LOCK_FUNCTION(...) __attribute__ ((shared_lock_function(__VA
_ARGS__))) |
| 13 #define EXCLUSIVE_TRYLOCK_FUNCTION(...) __attribute__ ((exclusive_trylock_functi
on(__VA_ARGS__))) |
| 14 #define SHARED_TRYLOCK_FUNCTION(...) __attribute__ ((shared_trylock_function(
__VA_ARGS__))) |
| 15 #define UNLOCK_FUNCTION(...) __attribute__ ((unlock_function(__VA_ARG
S__))) |
| 16 #define LOCK_RETURNED(x) __attribute__ ((lock_returned(x))) |
| 17 #define LOCKS_EXCLUDED(...) __attribute__ ((locks_excluded(__VA_ARGS__))) |
| 18 #define EXCLUSIVE_LOCKS_REQUIRED(...) \ |
| 19 __attribute__ ((exclusive_locks_required(__VA_ARGS__))) |
| 20 #define SHARED_LOCKS_REQUIRED(...) \ |
| 21 __attribute__ ((shared_locks_required(__VA_ARGS__))) |
| 22 #define NO_THREAD_SAFETY_ANALYSIS __attribute__ ((no_thread_safety_analysis)) |
3 | 23 |
4 //-----------------------------------------// | |
5 // Helper fields | |
6 //-----------------------------------------// | |
7 | 24 |
8 class __attribute__((lockable)) Mu { | 25 class __attribute__((lockable)) Mu { |
9 public: | 26 public: |
10 void Lock(); | 27 void Lock(); |
11 }; | 28 }; |
12 | 29 |
13 class UnlockableMu{ | 30 class UnlockableMu{ |
14 }; | 31 }; |
15 | 32 |
16 class MuWrapper { | 33 class MuWrapper { |
(...skipping 1279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1296 class Foo { | 1313 class Foo { |
1297 public: | 1314 public: |
1298 int __attribute__((guarded_by(mu_))) a; | 1315 int __attribute__((guarded_by(mu_))) a; |
1299 int __attribute__((guarded_by(mu_))) b, c; | 1316 int __attribute__((guarded_by(mu_))) b, c; |
1300 | 1317 |
1301 private: | 1318 private: |
1302 Mu mu_; | 1319 Mu mu_; |
1303 }; | 1320 }; |
1304 | 1321 |
1305 | 1322 |
| 1323 namespace NestedClassLateDecl { |
| 1324 |
| 1325 class Foo { |
| 1326 class Bar { |
| 1327 int a GUARDED_BY(mu); |
| 1328 int b GUARDED_BY(fooMuStatic); |
| 1329 |
| 1330 void bar() EXCLUSIVE_LOCKS_REQUIRED(mu) { a = 0; } |
| 1331 void bar2(Bar* b) EXCLUSIVE_LOCKS_REQUIRED(b->mu) { b->a = 0; } |
| 1332 void bar3(Foo* f) EXCLUSIVE_LOCKS_REQUIRED(f->fooMu) { f->a = 0; } |
| 1333 |
| 1334 Mu mu; |
| 1335 }; |
| 1336 |
| 1337 int a GUARDED_BY(fooMu); |
| 1338 Mu fooMu; |
| 1339 static Mu fooMuStatic; |
| 1340 }; |
| 1341 |
| 1342 } |
| 1343 |
1306 } // end namespace TestMultiDecl | 1344 } // end namespace TestMultiDecl |
1307 | 1345 |
OLD | NEW |