xref: /aosp_15_r20/external/clang/test/SemaCXX/cxx11-attr-print.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -ast-print -fms-extensions %s | FileCheck %s
2*67e74705SXin Li //
3*67e74705SXin Li // CHECK: int x __attribute__((aligned(4)));
4*67e74705SXin Li int x __attribute__((aligned(4)));
5*67e74705SXin Li 
6*67e74705SXin Li // FIXME: Print this at a valid location for a __declspec attr.
7*67e74705SXin Li // CHECK: int y __declspec(align(4));
8*67e74705SXin Li __declspec(align(4)) int y;
9*67e74705SXin Li 
10*67e74705SXin Li // CHECK: int z {{\[}}[gnu::aligned(4)]];
11*67e74705SXin Li int z [[gnu::aligned(4)]];
12*67e74705SXin Li 
13*67e74705SXin Li // CHECK: __attribute__((deprecated("warning")));
14*67e74705SXin Li int a __attribute__((deprecated("warning")));
15*67e74705SXin Li 
16*67e74705SXin Li // CHECK: int b {{\[}}[gnu::deprecated("warning")]];
17*67e74705SXin Li int b [[gnu::deprecated("warning")]];
18*67e74705SXin Li 
19*67e74705SXin Li // CHECK: __declspec(deprecated("warning"))
20*67e74705SXin Li __declspec(deprecated("warning")) int c;
21*67e74705SXin Li 
22*67e74705SXin Li // CHECK: int d {{\[}}[deprecated("warning")]];
23*67e74705SXin Li int d [[deprecated("warning")]];
24*67e74705SXin Li 
25*67e74705SXin Li // CHECK: __attribute__((deprecated("warning", "fixit")));
26*67e74705SXin Li int e __attribute__((deprecated("warning", "fixit")));
27*67e74705SXin Li 
28*67e74705SXin Li // CHECK: int cxx11_alignas alignas(4);
29*67e74705SXin Li alignas(4) int cxx11_alignas;
30*67e74705SXin Li 
31*67e74705SXin Li // CHECK: int c11_alignas _Alignas(alignof(int));
32*67e74705SXin Li _Alignas(int) int c11_alignas;
33*67e74705SXin Li 
34*67e74705SXin Li // CHECK: void foo() __attribute__((const));
35*67e74705SXin Li void foo() __attribute__((const));
36*67e74705SXin Li 
37*67e74705SXin Li // CHECK: void bar() __attribute__((__const));
38*67e74705SXin Li void bar() __attribute__((__const));
39*67e74705SXin Li 
40*67e74705SXin Li // CHECK: int f1() __attribute__((warn_unused_result));
41*67e74705SXin Li int f1() __attribute__((warn_unused_result));
42*67e74705SXin Li 
43*67e74705SXin Li // CHECK: {{\[}}[clang::warn_unused_result]];
44*67e74705SXin Li int f2 [[clang::warn_unused_result]] ();
45*67e74705SXin Li 
46*67e74705SXin Li // CHECK: {{\[}}[gnu::warn_unused_result]];
47*67e74705SXin Li int f3 [[gnu::warn_unused_result]] ();
48*67e74705SXin Li 
49*67e74705SXin Li // FIXME: ast-print need to print C++11
50*67e74705SXin Li // attribute after function declare-id.
51*67e74705SXin Li // CHECK: {{\[}}[noreturn]];
52*67e74705SXin Li void f4 [[noreturn]] ();
53*67e74705SXin Li 
54*67e74705SXin Li // CHECK: __attribute__((gnu_inline));
55*67e74705SXin Li inline void f6() __attribute__((gnu_inline));
56*67e74705SXin Li 
57*67e74705SXin Li // CHECK: {{\[}}[gnu::gnu_inline]];
58*67e74705SXin Li inline void f7 [[gnu::gnu_inline]] ();
59*67e74705SXin Li 
60*67e74705SXin Li // arguments printing
61*67e74705SXin Li // CHECK: __attribute__((format(printf, 2, 3)));
62*67e74705SXin Li void f8 (void *, const char *, ...) __attribute__ ((format (printf, 2, 3)));
63*67e74705SXin Li 
64*67e74705SXin Li // CHECK: int m __attribute__((aligned(4
65*67e74705SXin Li // CHECK: int n alignas(4
66*67e74705SXin Li // CHECK: static int f() __attribute__((pure))
67*67e74705SXin Li // CHECK: static int g() {{\[}}[gnu::pure]]
68*67e74705SXin Li template <typename T> struct S {
69*67e74705SXin Li   __attribute__((aligned(4))) int m;
70*67e74705SXin Li   alignas(4) int n;
fS71*67e74705SXin Li   __attribute__((pure)) static int f() {
72*67e74705SXin Li     return 0;
73*67e74705SXin Li   }
gS74*67e74705SXin Li   [[gnu::pure]] static int g() {
75*67e74705SXin Li     return 1;
76*67e74705SXin Li   }
77*67e74705SXin Li };
78*67e74705SXin Li 
79*67e74705SXin Li // CHECK: int m __attribute__((aligned(4
80*67e74705SXin Li // CHECK: int n alignas(4
81*67e74705SXin Li // CHECK: static int f() __attribute__((pure))
82*67e74705SXin Li // CHECK: static int g() {{\[}}[gnu::pure]]
83*67e74705SXin Li template struct S<int>;
84*67e74705SXin Li 
85*67e74705SXin Li // CHECK: using Small2 {{\[}}[gnu::mode(byte)]] = int;
86*67e74705SXin Li using Small2 [[gnu::mode(byte)]] = int;
87