/* Test lock annotations applied to function definitions. */ /* { dg-do compile } */ /* { dg-options "-Wthread-safety -O" } */ #include "thread_annot_common_c.h" struct Mutex mu1; struct Mutex mu2 ACQUIRED_AFTER(mu1); static int foo(int i) EXCLUSIVE_LOCKS_REQUIRED(mu2); int bar(int i) LOCKS_EXCLUDED(mu1) { return i; } static int foo(int i) SHARED_LOCKS_REQUIRED(mu1) { return bar(i); /* { dg-warning "Cannot call function 'bar' with lock 'mu1' held" } */ } main() { foo(2); /* { dg-warning "Calling function 'foo' requires lock 'mu2'" } */ } /* { dg-warning "Calling function 'foo' requires lock 'mu1'" "" { target *-*-* } 24 } */