1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li 3*67e74705SXin Li #define NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) 4*67e74705SXin Li 5*67e74705SXin Li #if !__has_attribute(no_sanitize_thread) 6*67e74705SXin Li #error "Should support no_sanitize_thread" 7*67e74705SXin Li #endif 8*67e74705SXin Li 9*67e74705SXin Li void noanal_fun() NO_SANITIZE_THREAD; 10*67e74705SXin Li 11*67e74705SXin Li void noanal_fun_alt() __attribute__((__no_sanitize_thread__)); 12*67e74705SXin Li 13*67e74705SXin Li void noanal_fun_args() __attribute__((no_sanitize_thread(1))); // \ 14*67e74705SXin Li // expected-error {{'no_sanitize_thread' attribute takes no arguments}} 15*67e74705SXin Li 16*67e74705SXin Li int noanal_testfn(int y) NO_SANITIZE_THREAD; 17*67e74705SXin Li noanal_testfn(int y)18*67e74705SXin Liint noanal_testfn(int y) { 19*67e74705SXin Li int x NO_SANITIZE_THREAD = y; // \ 20*67e74705SXin Li // expected-error {{'no_sanitize_thread' attribute only applies to functions}} 21*67e74705SXin Li return x; 22*67e74705SXin Li } 23*67e74705SXin Li 24*67e74705SXin Li int noanal_test_var NO_SANITIZE_THREAD; // \ 25*67e74705SXin Li // expected-error {{'no_sanitize_thread' attribute only applies to functions}} 26*67e74705SXin Li 27*67e74705SXin Li class NoanalFoo { 28*67e74705SXin Li private: 29*67e74705SXin Li int test_field NO_SANITIZE_THREAD; // \ 30*67e74705SXin Li // expected-error {{'no_sanitize_thread' attribute only applies to functions}} 31*67e74705SXin Li void test_method() NO_SANITIZE_THREAD; 32*67e74705SXin Li }; 33*67e74705SXin Li 34*67e74705SXin Li class NO_SANITIZE_THREAD NoanalTestClass { // \ 35*67e74705SXin Li // expected-error {{'no_sanitize_thread' attribute only applies to functions}} 36*67e74705SXin Li }; 37*67e74705SXin Li 38*67e74705SXin Li void noanal_fun_params(int lvar NO_SANITIZE_THREAD); // \ 39*67e74705SXin Li // expected-error {{'no_sanitize_thread' attribute only applies to functions}} 40