58 lines · cpp
1// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s2 3int i __attribute__((speculative_load_hardening)); // expected-error {{'speculative_load_hardening' attribute only applies to functions}}4 5void f1() __attribute__((speculative_load_hardening));6void f2() __attribute__((speculative_load_hardening(1))); // expected-error {{'speculative_load_hardening' attribute takes no arguments}}7 8template <typename T>9void tf1() __attribute__((speculative_load_hardening));10 11int f3(int __attribute__((speculative_load_hardening)), int); // expected-error {{'speculative_load_hardening' attribute only applies to functions}}12 13struct 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 19void f4() __attribute__((no_speculative_load_hardening, speculative_load_hardening)); // expected-error {{attributes are not compatible}}20// expected-note@-1 {{conflicting attribute is here}}21 22void f5() __attribute__((speculative_load_hardening, no_speculative_load_hardening)); // expected-error {{attributes are not compatible}}23// expected-note@-1 {{conflicting attribute is here}}24 25void f6() __attribute__((no_speculative_load_hardening)); // expected-note {{conflicting attribute is here}}26 27void f6() __attribute__((speculative_load_hardening)); // expected-error {{'speculative_load_hardening' and 'no_speculative_load_hardening' attributes are not compatible}}28 29int ci [[clang::speculative_load_hardening]]; // expected-error {{'clang::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 {{'clang::speculative_load_hardening' attribute takes no arguments}}33 34template <typename T>35[[clang::speculative_load_hardening]]36void ctf1();37 38int cf3(int c[[clang::speculative_load_hardening]], int); // expected-error {{'clang::speculative_load_hardening' attribute only applies to functions}}39 40struct CA {41 int f [[clang::speculative_load_hardening]]; // expected-error {{'clang::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]]53void cf6(); // expected-note@-1 {{conflicting attribute is here}}54 55[[clang::no_speculative_load_hardening]]56void cf6(); // expected-error@-1 {{'clang::no_speculative_load_hardening' and 'clang::speculative_load_hardening' attributes are not compatible}} \57 58