1 // RUN: %clang_cc1 -triple x86_64-pc-linux -std=c++11 -ast-dump -ast-dump-filter Test %s | FileCheck --strict-whitespace %s
2
3 int TestLocation
4 __attribute__((unused));
5 // CHECK: VarDecl{{.*}}TestLocation
6 // CHECK-NEXT: UnusedAttr 0x{{[^ ]*}} <line:[[@LINE-2]]:16>
7
8 int TestIndent
9 __attribute__((unused));
10 // CHECK: {{^}}VarDecl{{.*TestIndent[^()]*$}}
11 // CHECK-NEXT: {{^}}`-UnusedAttr{{[^()]*$}}
12
TestAttributedStmt()13 void TestAttributedStmt() {
14 switch (1) {
15 case 1:
16 [[clang::fallthrough]];
17 case 2:
18 ;
19 }
20 }
21 // CHECK: FunctionDecl{{.*}}TestAttributedStmt
22 // CHECK: AttributedStmt
23 // CHECK-NEXT: FallThroughAttr
24 // CHECK-NEXT: NullStmt
25
26 [[clang::warn_unused_result]] int TestCXX11DeclAttr();
27 // CHECK: FunctionDecl{{.*}}TestCXX11DeclAttr
28 // CHECK-NEXT: WarnUnusedResultAttr
29
30 int TestAlignedNull __attribute__((aligned));
31 // CHECK: VarDecl{{.*}}TestAlignedNull
32 // CHECK-NEXT: AlignedAttr
33 // CHECK-NEXT: <<<NULL>>>
34
35 int TestAlignedExpr __attribute__((aligned(4)));
36 // CHECK: VarDecl{{.*}}TestAlignedExpr
37 // CHECK-NEXT: AlignedAttr
38 // CHECK-NEXT: IntegerLiteral
39
40 int TestEnum __attribute__((visibility("default")));
41 // CHECK: VarDecl{{.*}}TestEnum
42 // CHECK-NEXT: VisibilityAttr{{.*}} Default
43
44 class __attribute__((lockable)) Mutex {
45 } mu1, mu2;
46 int TestExpr __attribute__((guarded_by(mu1)));
47 // CHECK: VarDecl{{.*}}TestExpr
48 // CHECK-NEXT: GuardedByAttr
49 // CHECK-NEXT: DeclRefExpr{{.*}}mu1
50
51 class Mutex TestVariadicExpr __attribute__((acquired_after(mu1, mu2)));
52 // CHECK: VarDecl{{.*}}TestVariadicExpr
53 // CHECK: AcquiredAfterAttr
54 // CHECK-NEXT: DeclRefExpr{{.*}}mu1
55 // CHECK-NEXT: DeclRefExpr{{.*}}mu2
56
function1(void *)57 void function1(void *) {
58 int TestFunction __attribute__((cleanup(function1)));
59 }
60 // CHECK: VarDecl{{.*}}TestFunction
61 // CHECK-NEXT: CleanupAttr{{.*}} Function{{.*}}function1
62
63 void TestIdentifier(void *, int)
64 __attribute__((pointer_with_type_tag(ident1,1,2)));
65 // CHECK: FunctionDecl{{.*}}TestIdentifier
66 // CHECK: ArgumentWithTypeTagAttr{{.*}} ident1
67
68 void TestBool(void *, int)
69 __attribute__((pointer_with_type_tag(bool1,1,2)));
70 // CHECK: FunctionDecl{{.*}}TestBool
71 // CHECK: ArgumentWithTypeTagAttr{{.*}} IsPointer
72
73 void TestUnsigned(void *, int)
74 __attribute__((pointer_with_type_tag(unsigned1,1,2)));
75 // CHECK: FunctionDecl{{.*}}TestUnsigned
76 // CHECK: ArgumentWithTypeTagAttr{{.*}} 0 1
77
78 void TestInt(void) __attribute__((constructor(123)));
79 // CHECK: FunctionDecl{{.*}}TestInt
80 // CHECK-NEXT: ConstructorAttr{{.*}} 123
81
82 int TestString __attribute__((alias("alias1")));
83 // CHECK: VarDecl{{.*}}TestString
84 // CHECK-NEXT: AliasAttr{{.*}} "alias1"
85
86 extern struct s1 TestType
87 __attribute__((type_tag_for_datatype(ident1,int)));
88 // CHECK: VarDecl{{.*}}TestType
89 // CHECK-NEXT: TypeTagForDatatypeAttr{{.*}} int
90
91 void *TestVariadicUnsigned1(int) __attribute__((alloc_size(1)));
92 // CHECK: FunctionDecl{{.*}}TestVariadicUnsigned1
93 // CHECK: AllocSizeAttr{{.*}} 0
94
95 void *TestVariadicUnsigned2(int, int) __attribute__((alloc_size(1,2)));
96 // CHECK: FunctionDecl{{.*}}TestVariadicUnsigned2
97 // CHECK: AllocSizeAttr{{.*}} 0 1
98