blob: 8f23b2db5549d65f52f52d3b721b2d056424122b [file] [log] [blame]
// Test the support for annotations on virtual functions.
// { dg-do compile }
// { dg-options "-Wthread-safety -O" }
#include "thread_annot_common.h"
class Base {
public:
virtual void func1() EXCLUSIVE_LOCKS_REQUIRED(mu_);
virtual void func2() LOCKS_EXCLUDED(mu_);
Mutex mu_;
};
class Child : public Base {
public:
virtual void func1() EXCLUSIVE_LOCKS_REQUIRED(mu_);
virtual void func2() LOCKS_EXCLUDED(mu_);
};
main() {
Child *c;
Base *b = c;
b->func1(); // { dg-warning "Calling function 'func1' requires lock" }
b->mu_.Lock();
b->func2(); // { dg-warning "Cannot call function" }
b->mu_.Unlock();
c->func1(); // { dg-warning "Calling function 'func1' requires lock" }
c->mu_.Lock();
c->func2(); // { dg-warning "Cannot call function" }
c->mu_.Unlock();
}