blob: b4ce1c8b9d58d3b8fb131bc9609049ef9f842076 [file] [log] [blame]
/* Test function lock requirement 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(int i) EXCLUSIVE_LOCK_FUNCTION(((&f)->mu)); /* { dg-warning "Unsupported argument of 'exclusive_lock' attribute ignored" } */
int pthread_mutex_unlock() UNLOCK_FUNCTION(f[0].mu); /* { dg-warning "Unsupported argument of 'unlock' attribute ignored" } */
int pthread_mutex_trylock() EXCLUSIVE_TRYLOCK_FUNCTION(0, t->mu1); /* { dg-warning "Unsupported argument of 'exclusive_trylock' attribute ignored" } */
struct Mutex *mu3;
int p GUARDED_BY(mu3);
int r GUARDED_BY(mu3);
void my_lock() EXCLUSIVE_LOCK_FUNCTION(mu3);
void my_unlock() UNLOCK_FUNCTION(mu3);
extern void foo(int i, int j, struct Mutex *mu) EXCLUSIVE_LOCKS_REQUIRED(3);
void foo(int i, int j, struct Mutex *mu) LOCKS_EXCLUDED(t->mu3)
{ /* { dg-warning "Unsupported argument of 'locks_excluded' attribute ignored" } */
int *q PT_GUARDED_BY(mu);
my_lock();
p = *q;
*q = 4;
my_unlock();
}
int bar() SHARED_LOCKS_REQUIRED(y->mu); /* { dg-warning "Unsupported argument of 'shared_locks_required' attribute ignored" } */
int bar()
{
int t = r;
return t;
}
main()
{
foo(2, 3, mu3); /* { dg-warning "Calling function 'foo' requires lock 'mu3'" "annotalysis disabled in google/main" { xfail *-*-* } } */
my_lock();
foo(2, 3, mu3);
bar();
my_unlock();
bar(); /* { dg-warning "Calling function 'bar' requires a lock" "annotalysis disabled in google/main" { xfail *-*-* } } */
}