xref: /aosp_15_r20/external/clang/test/SemaCXX/attr-optnone.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -fms-compatibility -fsyntax-only -verify %s
2*67e74705SXin Li 
3*67e74705SXin Li int foo() __attribute__((optnone));
4*67e74705SXin Li int bar() __attribute__((optnone)) __attribute__((noinline));
5*67e74705SXin Li 
6*67e74705SXin Li int baz() __attribute__((always_inline)) __attribute__((optnone)); // expected-warning{{'always_inline' attribute ignored}} expected-note{{conflicting attribute is here}}
7*67e74705SXin Li int quz() __attribute__((optnone)) __attribute__((always_inline)); // expected-warning{{'always_inline' attribute ignored}} expected-note{{conflicting attribute is here}}
8*67e74705SXin Li 
9*67e74705SXin Li __attribute__((always_inline)) int baz1(); // expected-warning{{'always_inline' attribute ignored}}
baz1()10*67e74705SXin Li __attribute__((optnone)) int baz1() { return 1; } // expected-note{{conflicting attribute is here}}
11*67e74705SXin Li 
12*67e74705SXin Li __attribute__((optnone)) int quz1(); // expected-note{{conflicting attribute is here}}
quz1()13*67e74705SXin Li __attribute__((always_inline)) int quz1() { return 1; } // expected-warning{{'always_inline' attribute ignored}}
14*67e74705SXin Li 
15*67e74705SXin Li int bay() __attribute__((minsize)) __attribute__((optnone)); // expected-warning{{'minsize' attribute ignored}} expected-note{{conflicting}}
16*67e74705SXin Li int quy() __attribute__((optnone)) __attribute__((minsize)); // expected-warning{{'minsize' attribute ignored}} expected-note{{conflicting}}
17*67e74705SXin Li 
18*67e74705SXin Li __attribute__((minsize)) int bay1(); // expected-warning{{'minsize' attribute ignored}}
bay1()19*67e74705SXin Li __attribute__((optnone)) int bay1() { return 1; } // expected-note{{conflicting attribute is here}}
20*67e74705SXin Li 
21*67e74705SXin Li __attribute__((optnone)) int quy1(); // expected-note{{conflicting attribute is here}}
quy1()22*67e74705SXin Li __attribute__((minsize)) int quy1() { return 1; } // expected-warning{{'minsize' attribute ignored}}
23*67e74705SXin Li 
24*67e74705SXin Li __attribute__((always_inline)) // expected-warning{{'always_inline' attribute ignored}}
25*67e74705SXin Li   __attribute__((minsize)) // expected-warning{{'minsize' attribute ignored}}
26*67e74705SXin Li void bay2();
27*67e74705SXin Li __attribute__((optnone)) // expected-note 2 {{conflicting}}
bay2()28*67e74705SXin Li void bay2() {}
29*67e74705SXin Li 
30*67e74705SXin Li __forceinline __attribute__((optnone)) int bax(); // expected-warning{{'__forceinline' attribute ignored}} expected-note{{conflicting}}
31*67e74705SXin Li __attribute__((optnone)) __forceinline int qux(); // expected-warning{{'__forceinline' attribute ignored}} expected-note{{conflicting}}
32*67e74705SXin Li 
33*67e74705SXin Li __forceinline int bax2(); // expected-warning{{'__forceinline' attribute ignored}}
bax2()34*67e74705SXin Li __attribute__((optnone)) int bax2() { return 1; } // expected-note{{conflicting}}
35*67e74705SXin Li __attribute__((optnone)) int qux2(); // expected-note{{conflicting}}
qux2()36*67e74705SXin Li __forceinline int qux2() { return 1; } // expected-warning{{'__forceinline' attribute ignored}}
37*67e74705SXin Li 
38*67e74705SXin Li int globalVar __attribute__((optnone)); // expected-warning{{'optnone' attribute only applies to functions}}
39*67e74705SXin Li 
40*67e74705SXin Li int fubar(int __attribute__((optnone)), int); // expected-warning{{'optnone' attribute only applies to functions}}
41*67e74705SXin Li 
42*67e74705SXin Li struct A {
43*67e74705SXin Li   int aField __attribute__((optnone));  // expected-warning{{'optnone' attribute only applies to functions}}
44*67e74705SXin Li };
45*67e74705SXin Li 
46*67e74705SXin Li struct B {
47*67e74705SXin Li   void foo() __attribute__((optnone));
48*67e74705SXin Li   static void bar() __attribute__((optnone));
49*67e74705SXin Li };
50*67e74705SXin Li 
51*67e74705SXin Li // Verify that we can specify the [[clang::optnone]] syntax as well.
52*67e74705SXin Li 
53*67e74705SXin Li [[clang::optnone]]
54*67e74705SXin Li int foo2();
55*67e74705SXin Li [[clang::optnone]]
56*67e74705SXin Li int bar2() __attribute__((noinline));
57*67e74705SXin Li 
58*67e74705SXin Li [[clang::optnone]] // expected-note {{conflicting}}
59*67e74705SXin Li int baz2() __attribute__((always_inline)); // expected-warning{{'always_inline' attribute ignored}}
60*67e74705SXin Li 
61*67e74705SXin Li [[clang::optnone]] int globalVar2; //expected-warning{{'optnone' attribute only applies to functions}}
62*67e74705SXin Li 
63*67e74705SXin Li struct A2 {
64*67e74705SXin Li   [[clang::optnone]] int aField; // expected-warning{{'optnone' attribute only applies to functions}}
65*67e74705SXin Li };
66*67e74705SXin Li 
67*67e74705SXin Li struct B2 {
68*67e74705SXin Li   [[clang::optnone]]
69*67e74705SXin Li   void foo();
70*67e74705SXin Li   [[clang::optnone]]
71*67e74705SXin Li   static void bar();
72*67e74705SXin Li };
73*67e74705SXin Li 
74