xref: /llvm-project/clang/test/SemaCXX/attr-speculative-load-hardening.cpp (revision 4be8a26951da9a6e04de327b38dd158f4c8e3280)
1cbac3ad1SZola Bridges // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
2cbac3ad1SZola Bridges 
3cbac3ad1SZola Bridges int i __attribute__((speculative_load_hardening)); // expected-error {{'speculative_load_hardening' attribute only applies to functions}}
4cbac3ad1SZola Bridges 
5cbac3ad1SZola Bridges void f1() __attribute__((speculative_load_hardening));
6cbac3ad1SZola Bridges void f2() __attribute__((speculative_load_hardening(1))); // expected-error {{'speculative_load_hardening' attribute takes no arguments}}
7cbac3ad1SZola Bridges 
8cbac3ad1SZola Bridges template <typename T>
9cbac3ad1SZola Bridges void tf1() __attribute__((speculative_load_hardening));
10cbac3ad1SZola Bridges 
11cbac3ad1SZola Bridges int f3(int __attribute__((speculative_load_hardening)), int); // expected-error {{'speculative_load_hardening' attribute only applies to functions}}
12cbac3ad1SZola Bridges 
13cbac3ad1SZola Bridges struct A {
14cbac3ad1SZola Bridges   int f __attribute__((speculative_load_hardening));  // expected-error {{'speculative_load_hardening' attribute only applies to functions}}
15cbac3ad1SZola Bridges   void mf1() __attribute__((speculative_load_hardening));
16cbac3ad1SZola Bridges   static void mf2() __attribute__((speculative_load_hardening));
17cbac3ad1SZola Bridges };
18cbac3ad1SZola Bridges 
19826ef595SZola Bridges void f4() __attribute__((no_speculative_load_hardening, speculative_load_hardening)); // expected-error {{attributes are not compatible}}
20826ef595SZola Bridges // expected-note@-1 {{conflicting attribute is here}}
21826ef595SZola Bridges 
22826ef595SZola Bridges void f5() __attribute__((speculative_load_hardening, no_speculative_load_hardening)); // expected-error {{attributes are not compatible}}
23826ef595SZola Bridges // expected-note@-1 {{conflicting attribute is here}}
24826ef595SZola Bridges 
25*4be8a269SAaron Ballman void f6() __attribute__((no_speculative_load_hardening)); // expected-note {{conflicting attribute is here}}
26826ef595SZola Bridges 
27*4be8a269SAaron Ballman void f6() __attribute__((speculative_load_hardening)); // expected-error {{'speculative_load_hardening' and 'no_speculative_load_hardening' attributes are not compatible}}
28826ef595SZola Bridges 
29cbac3ad1SZola Bridges int ci [[clang::speculative_load_hardening]]; // expected-error {{'speculative_load_hardening' attribute only applies to functions}}
30cbac3ad1SZola Bridges 
31cbac3ad1SZola Bridges [[clang::speculative_load_hardening]] void cf1();
32cbac3ad1SZola Bridges [[clang::speculative_load_hardening(1)]] void cf2(); // expected-error {{'speculative_load_hardening' attribute takes no arguments}}
33cbac3ad1SZola Bridges 
34cbac3ad1SZola Bridges template <typename T>
35cbac3ad1SZola Bridges [[clang::speculative_load_hardening]]
36cbac3ad1SZola Bridges void ctf1();
37cbac3ad1SZola Bridges 
38cbac3ad1SZola Bridges int cf3(int c[[clang::speculative_load_hardening]], int); // expected-error {{'speculative_load_hardening' attribute only applies to functions}}
39cbac3ad1SZola Bridges 
40cbac3ad1SZola Bridges struct CA {
41cbac3ad1SZola Bridges   int f [[clang::speculative_load_hardening]];  // expected-error {{'speculative_load_hardening' attribute only applies to functions}}
42cbac3ad1SZola Bridges   [[clang::speculative_load_hardening]] void mf1();
43cbac3ad1SZola Bridges   [[clang::speculative_load_hardening]] static void mf2();
44cbac3ad1SZola Bridges };
45826ef595SZola Bridges 
46826ef595SZola Bridges [[clang::speculative_load_hardening, clang::no_speculative_load_hardening]] void cf4();  // expected-error {{attributes are not compatible}}
47826ef595SZola Bridges // expected-note@-1 {{conflicting attribute is here}}
48826ef595SZola Bridges 
49826ef595SZola Bridges [[clang::no_speculative_load_hardening, clang::speculative_load_hardening]] void cf5();  // expected-error {{attributes are not compatible}}
50826ef595SZola Bridges // expected-note@-1 {{conflicting attribute is here}}
51826ef595SZola Bridges 
52826ef595SZola Bridges [[clang::speculative_load_hardening]]
53*4be8a269SAaron Ballman void cf6(); // expected-note@-1 {{conflicting attribute is here}}
54826ef595SZola Bridges 
55826ef595SZola Bridges [[clang::no_speculative_load_hardening]]
56*4be8a269SAaron Ballman void cf6(); // expected-error@-1 {{'no_speculative_load_hardening' and 'speculative_load_hardening' attributes are not compatible}} \
57*4be8a269SAaron Ballman 
58