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)); // expected-note {{conflicting attribute is here}} 26 27 void f6() __attribute__((speculative_load_hardening)); // expected-error {{'speculative_load_hardening' and 'no_speculative_load_hardening' attributes are not compatible}} 28 29 int ci [[clang::speculative_load_hardening]]; // expected-error {{'speculative_load_hardening' attribute only applies to functions}} 30 31 [[clang::speculative_load_hardening]] void cf1(); 32 [[clang::speculative_load_hardening(1)]] void cf2(); // expected-error {{'speculative_load_hardening' attribute takes no arguments}} 33 34 template <typename T> 35 [[clang::speculative_load_hardening]] 36 void ctf1(); 37 38 int cf3(int c[[clang::speculative_load_hardening]], int); // expected-error {{'speculative_load_hardening' attribute only applies to functions}} 39 40 struct CA { 41 int f [[clang::speculative_load_hardening]]; // expected-error {{'speculative_load_hardening' attribute only applies to functions}} 42 [[clang::speculative_load_hardening]] void mf1(); 43 [[clang::speculative_load_hardening]] static void mf2(); 44 }; 45 46 [[clang::speculative_load_hardening, clang::no_speculative_load_hardening]] void cf4(); // expected-error {{attributes are not compatible}} 47 // expected-note@-1 {{conflicting attribute is here}} 48 49 [[clang::no_speculative_load_hardening, clang::speculative_load_hardening]] void cf5(); // expected-error {{attributes are not compatible}} 50 // expected-note@-1 {{conflicting attribute is here}} 51 52 [[clang::speculative_load_hardening]] 53 void cf6(); // expected-note@-1 {{conflicting attribute is here}} 54 55 [[clang::no_speculative_load_hardening]] 56 void cf6(); // expected-error@-1 {{'no_speculative_load_hardening' and 'speculative_load_hardening' attributes are not compatible}} \ 57 58