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