1 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s 2 3 int i __attribute__((speculative_load_hardening)); // expected-error {{'speculative_load_hardening' attribute only applies to functions}} 4 5 void f1() __attribute__((speculative_load_hardening)); 6 void f2() __attribute__((speculative_load_hardening(1))); // expected-error {{'speculative_load_hardening' attribute takes no arguments}} 7 8 template <typename T> 9 void tf1() __attribute__((speculative_load_hardening)); 10 11 int f3(int __attribute__((speculative_load_hardening)), int); // expected-error {{'speculative_load_hardening' attribute only applies to functions}} 12 13 struct A { 14 int f __attribute__((speculative_load_hardening)); // expected-error {{'speculative_load_hardening' attribute only applies to functions}} 15 void mf1() __attribute__((speculative_load_hardening)); 16 static void mf2() __attribute__((speculative_load_hardening)); 17 }; 18 19 void f4() __attribute__((no_speculative_load_hardening, speculative_load_hardening)); // expected-error {{attributes are not compatible}} 20 // expected-note@-1 {{conflicting attribute is here}} 21 22 void f5() __attribute__((speculative_load_hardening, no_speculative_load_hardening)); // expected-error {{attributes are not compatible}} 23 // expected-note@-1 {{conflicting attribute is here}} 24 25 void f6() __attribute__((no_speculative_load_hardening)); 26 27 void f6() __attribute__((speculative_load_hardening)); // expected-error@-2 {{'no_speculative_load_hardening' and 'speculative_load_hardening' attributes are not compatible}} 28 // expected-note@-1 {{conflicting attribute is here}} 29 30 int ci [[clang::speculative_load_hardening]]; // expected-error {{'speculative_load_hardening' attribute only applies to functions}} 31 32 [[clang::speculative_load_hardening]] void cf1(); 33 [[clang::speculative_load_hardening(1)]] void cf2(); // expected-error {{'speculative_load_hardening' attribute takes no arguments}} 34 35 template <typename T> 36 [[clang::speculative_load_hardening]] 37 void ctf1(); 38 39 int cf3(int c[[clang::speculative_load_hardening]], int); // expected-error {{'speculative_load_hardening' attribute only applies to functions}} 40 41 struct CA { 42 int f [[clang::speculative_load_hardening]]; // expected-error {{'speculative_load_hardening' attribute only applies to functions}} 43 [[clang::speculative_load_hardening]] void mf1(); 44 [[clang::speculative_load_hardening]] static void mf2(); 45 }; 46 47 [[clang::speculative_load_hardening, clang::no_speculative_load_hardening]] void cf4(); // expected-error {{attributes are not compatible}} 48 // expected-note@-1 {{conflicting attribute is here}} 49 50 [[clang::no_speculative_load_hardening, clang::speculative_load_hardening]] void cf5(); // expected-error {{attributes are not compatible}} 51 // expected-note@-1 {{conflicting attribute is here}} 52 53 [[clang::speculative_load_hardening]] 54 void cf6(); 55 56 [[clang::no_speculative_load_hardening]] 57 void cf6(); // expected-error@-4 {{'speculative_load_hardening' and 'no_speculative_load_hardening' attributes are not compatible}} \ 58 // expected-note@-1 {{conflicting attribute is here}} 59