1*2d58d19cSYi Kong // RUN: %clang_cc1 -fsyntax-only -Wthread-safety -verify %s
2*2d58d19cSYi Kong 
3*2d58d19cSYi Kong class __attribute__((shared_capability("mutex"))) Mutex {
4*2d58d19cSYi Kong  public:
5*2d58d19cSYi Kong   void func1() __attribute__((assert_capability(this)));
6*2d58d19cSYi Kong   void func2() __attribute__((assert_capability(!this)));
7*2d58d19cSYi Kong 
operator !() const8*2d58d19cSYi Kong   const Mutex& operator!() const { return *this; }
9*2d58d19cSYi Kong };
10*2d58d19cSYi Kong 
11*2d58d19cSYi Kong class NotACapability {
12*2d58d19cSYi Kong  public:
13*2d58d19cSYi Kong   void func1() __attribute__((assert_capability(this)));  // expected-warning {{'assert_capability' attribute requires arguments whose type is annotated with 'capability' attribute; type here is 'NotACapability *'}}
14*2d58d19cSYi Kong   void func2() __attribute__((assert_capability(!this)));  // expected-warning {{'assert_capability' attribute requires arguments whose type is annotated with 'capability' attribute; type here is 'bool'}}
15*2d58d19cSYi Kong 
operator !() const16*2d58d19cSYi Kong   const NotACapability& operator!() const { return *this; }
17*2d58d19cSYi Kong };
18