| /* Test guarded_by/pt_guarded_by annotations with unsupported or unrecognized |
| lock names/expressions. */ |
| /* { dg-do compile } */ |
| /* { dg-options "-Wthread-safety -Wthread-unsupported-lock-name -O" } */ |
| |
| #include "thread_annot_common_c.h" |
| |
| int pthread_mutex_lock(struct Mutex *mu, int i) EXCLUSIVE_LOCK_FUNCTION(1); |
| int pthread_mutex_unlock(struct Mutex *mu) UNLOCK_FUNCTION(1); |
| int pthread_mutex_trylock() EXCLUSIVE_TRYLOCK_FUNCTION(0, t->mu1); /* { dg-warning "Unsupported argument of 'exclusive_trylock' attribute ignored" } */ |
| |
| struct Bar { |
| float x_ GUARDED_BY(((mu1_))); /* { dg-warning "'guarded_by' attribute downgraded to 'guarded'" } */ |
| struct Mutex mu1_ ACQUIRED_AFTER(mu2); |
| float a_ GUARDED_BY(foo_->mu_); /* { dg-warning "'guarded_by' attribute downgraded to 'guarded'" } */ |
| }; |
| |
| int p GUARDED_BY(a->mu); /* { dg-warning "'guarded_by' attribute downgraded to 'guarded'" } */ |
| int *r PT_GUARDED_BY(f1.mu_); /* { dg-warning "'point_to_guarded_by' attribute downgraded to 'point_to_guarded'" } */ |
| |
| struct Bar *b1; |
| struct Mutex *mu3; |
| |
| int foo(int i, int j, struct Mutex *mu) EXCLUSIVE_LOCKS_REQUIRED(3) |
| { |
| int *q PT_GUARDED_BY(mu); |
| int t = *q; |
| *q = 4; |
| return t; |
| } |
| |
| int main() |
| { |
| pthread_mutex_lock(&b1->mu1_, 2); |
| p = *r + 5; |
| b1->x_ = 3; |
| pthread_mutex_unlock(&b1->mu1_); |
| } |